basictypes.rng \
capability.rng \
domain.rng \
+ domaincommon.rng \
domainsnapshot.rng \
interface.rng \
network.rng \
<ref name="domain"/>
</start>
- <include href='basictypes.rng'/>
- <include href='storageencryption.rng'/>
- <include href='networkcommon.rng'/>
-
- <!--
- description element, maybe placed anywhere under the root
- -->
- <define name="description">
- <element name="description">
- <text/>
- </element>
- </define>
-
- <!--
- We handle only document defining a domain
- -->
- <define name="domain">
- <element name="domain">
- <ref name="hvs"/>
- <ref name="ids"/>
- <interleave>
- <optional>
- <ref name="description"/>
- </optional>
- <optional>
- <ref name="cpu"/>
- </optional>
- <optional>
- <ref name="sysinfo"/>
- </optional>
- <ref name="os"/>
- <ref name="clock"/>
- <ref name="resources"/>
- <ref name="features"/>
- <ref name="termination"/>
- <optional>
- <ref name="devices"/>
- </optional>
- <optional>
- <ref name="seclabel"/>
- </optional>
- <optional>
- <ref name='qemucmdline'/>
- </optional>
- </interleave>
- </element>
- </define>
- <define name="seclabel">
- <element name="seclabel">
- <attribute name="model">
- <text/>
- </attribute>
- <attribute name="type">
- <choice>
- <value>dynamic</value>
- <value>static</value>
- </choice>
- </attribute>
- <attribute name="relabel">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- <element name="label">
- <text/>
- </element>
- <element name="imagelabel">
- <text/>
- </element>
- <element name="baselabel">
- <text/>
- </element>
- </element>
- </define>
- <define name="hvs">
- <attribute name="type">
- <choice>
- <value>xen</value>
- <value>kvm</value>
- <value>kqemu</value>
- <value>qemu</value>
- <value>lxc</value>
- <value>openvz</value>
- <value>test</value>
- </choice>
- </attribute>
- </define>
- <define name="os">
- <choice>
- <ref name="osxen"/>
- <ref name="oshvm"/>
- <ref name="osexe"/>
- </choice>
- </define>
- <define name="osxen">
- <choice>
- <group>
- <optional>
- <ref name="bootloader"/>
- </optional>
- <element name="os">
- <ref name="ostypexen"/>
- <ref name="osbootkernel"/>
- </element>
- </group>
- <group>
- <ref name="bootloader"/>
- <optional>
- <element name="os">
- <ref name="ostypexen"/>
- <optional>
- <ref name="osbootkernel"/>
- </optional>
- </element>
- </optional>
- </group>
- </choice>
- </define>
- <define name="oshvm">
- <element name="os">
- <ref name="ostypehvm"/>
- <interleave>
- <optional>
- <element name="loader">
- <ref name="absFilePath"/>
- </element>
- </optional>
- <choice>
- <ref name="osbootkernel"/>
- <zeroOrMore>
- <ref name="osbootdev"/>
- </zeroOrMore>
- </choice>
- <optional>
- <element name="bootmenu">
- <attribute name="enable">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </element>
- </optional>
- <optional>
- <ref name="smbios"/>
- </optional>
- <optional>
- <ref name="bios"/>
- </optional>
- </interleave>
- </element>
- </define>
- <define name="ostypexen">
- <element name="type">
- <optional>
- <attribute name="arch">
- <choice>
- <value>i686</value>
- <value>x86_64</value>
- <value>ia64</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="machine">
- <choice>
- <value>xenpv</value>
- <value>xenner</value>
- </choice>
- </attribute>
- </optional>
- <choice>
- <value>xen</value>
- <value>linux</value>
- </choice>
- </element>
- </define>
- <define name="ostypehvm">
- <element name="type">
- <optional>
- <choice>
- <ref name="hvmx86"/>
- <ref name="hvmmips"/>
- <ref name="hvmsparc"/>
- <ref name="hvmppc"/>
- </choice>
- </optional>
- <value>hvm</value>
- </element>
- </define>
- <define name="hvmx86">
- <group>
- <optional>
- <attribute name="arch">
- <choice>
- <value>i686</value>
- <value>x86_64</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="machine">
- <data type="string">
- <param name="pattern">[a-zA-Z0-9_\.\-]+</param>
- </data>
- </attribute>
- </optional>
- </group>
- </define>
- <define name="hvmmips">
- <group>
- <optional>
- <attribute name="arch">
- <value>mips</value>
- </attribute>
- </optional>
- <optional>
- <attribute name="machine">
- <value>mips</value>
- </attribute>
- </optional>
- </group>
- </define>
- <define name="hvmsparc">
- <group>
- <optional>
- <attribute name="arch">
- <value>sparc</value>
- </attribute>
- </optional>
- <optional>
- <attribute name="machine">
- <value>sun4m</value>
- </attribute>
- </optional>
- </group>
- </define>
- <define name="hvmppc">
- <group>
- <optional>
- <attribute name="arch">
- <value>ppc</value>
- </attribute>
- </optional>
- <optional>
- <attribute name="machine">
- <choice>
- <value>g3beige</value>
- <value>mac99</value>
- <value>prep</value>
- </choice>
- </attribute>
- </optional>
- </group>
- </define>
- <define name="osexe">
- <element name="os">
- <element name="type">
- <value>exe</value>
- </element>
- <interleave>
- <optional>
- <element name="init">
- <ref name="absFilePath"/>
- </element>
- </optional>
- </interleave>
- </element>
- </define>
- <!--
- The Identifiers can be:
- - an optional id attribute with a number on the domain element
- - a mandatory name
- - an optional uuid
- -->
- <define name="ids">
- <optional>
- <attribute name="id">
- <ref name="unsignedInt"/>
- </attribute>
- </optional>
- <interleave>
- <element name="name">
- <ref name="domainName"/>
- </element>
- <optional>
- <element name="uuid">
- <ref name="UUID"/>
- </element>
- </optional>
- </interleave>
- </define>
- <!--
- Resources usage defines the amount of memory (maximum and possibly
- current usage) and number of virtual CPUs used by that domain.
- We can't check here the rule that currentMemory <= memory
- -->
- <define name="resources">
- <interleave>
- <element name="memory">
- <ref name="memoryKB"/>
- </element>
- <optional>
- <element name="currentMemory">
- <ref name="memoryKB"/>
- </element>
- </optional>
- <optional>
- <element name="memoryBacking">
- <optional>
- <element name="hugepages">
- <empty/>
- </element>
- </optional>
- </element>
- </optional>
-
- <!-- The Blkio cgroup related tunables would go in the blkiotune -->
- <optional>
- <element name="blkiotune">
- <!-- I/O weight the VM can use -->
- <optional>
- <element name="weight">
- <ref name="weight"/>
- </element>
- </optional>
- </element>
- </optional>
-
- <!-- All the memory/swap related tunables would go in the memtune -->
- <optional>
- <element name="memtune">
- <!-- Maximum memory the VM can use -->
- <optional>
- <element name="hard_limit">
- <ref name="memoryKB"/>
- </element>
- </optional>
- <!-- Minimum memory ascertained for the VM during contention -->
- <optional>
- <element name="soft_limit">
- <ref name="memoryKB"/>
- </element>
- </optional>
- <!-- Minimum amount of memory required to start the VM -->
- <optional>
- <element name="min_guarantee">
- <ref name="memoryKB"/>
- </element>
- </optional>
- <!-- Maximum swap area the VM can use -->
- <optional>
- <element name="swap_hard_limit">
- <ref name="memoryKB"/>
- </element>
- </optional>
- </element>
- </optional>
-
- <optional>
- <element name="vcpu">
- <optional>
- <attribute name="cpuset">
- <ref name="cpuset"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="current">
- <ref name="countCPU"/>
- </attribute>
- </optional>
- <ref name="countCPU"/>
- </element>
- </optional>
-
- <!-- All the cpu related tunables would go in the cputune -->
- <optional>
- <element name="cputune">
- <optional>
- <element name="shares">
- <ref name="cpushares"/>
- </element>
- </optional>
- <optional>
- <element name="period">
- <ref name="cpuperiod"/>
- </element>
- </optional>
- <optional>
- <element name="quota">
- <ref name="cpuquota"/>
- </element>
- </optional>
- <zeroOrMore>
- <element name="vcpupin">
- <attribute name="vcpu">
- <ref name="vcpuid"/>
- </attribute>
- <attribute name="cpuset">
- <ref name="cpuset"/>
- </attribute>
- </element>
- </zeroOrMore>
- </element>
- </optional>
-
- <!-- All the NUMA related tunables would go in the numatune -->
- <optional>
- <element name="numatune">
- <optional>
- <element name="memory">
- <attribute name="mode">
- <choice>
- <value>strict</value>
- <value>preferred</value>
- <value>interleave</value>
- </choice>
- </attribute>
- <attribute name="nodeset">
- <ref name="cpuset"/>
- </attribute>
- </element>
- </optional>
- </element>
- </optional>
- </interleave>
- </define>
- <define name="clock">
- <optional>
- <element name="clock">
- <choice>
- <attribute name="offset">
- <value>localtime</value>
- </attribute>
- <attribute name="offset">
- <value>utc</value>
- </attribute>
- <group>
- <attribute name="offset">
- <value>timezone</value>
- </attribute>
- <optional>
- <attribute name="timezone">
- <ref name="timeZone"/>
- </attribute>
- </optional>
- </group>
- <group>
- <attribute name="offset">
- <value>variable</value>
- </attribute>
- <optional>
- <attribute name="adjustment">
- <ref name="timeDelta"/>
- </attribute>
- </optional>
- </group>
- </choice>
- <zeroOrMore>
- <ref name="timer"/>
- </zeroOrMore>
- </element>
- </optional>
- </define>
- <define name="timer">
- <element name="timer">
- <attribute name="name">
- <choice>
- <value>platform</value>
- <value>pit</value>
- <value>rtc</value>
- <value>hpet</value>
- <value>tsc</value>
- </choice>
- </attribute>
- <optional>
- <attribute name="track">
- <choice>
- <value>boot</value>
- <value>guest</value>
- <value>wall</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="tickpolicy">
- <choice>
- <value>delay</value>
- <value>catchup</value>
- <value>merge</value>
- <value>discard</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <ref name="catchup"/>
- </optional>
- <optional>
- <attribute name="frequency">
- <ref name="unsignedInt"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="mode">
- <choice>
- <value>auto</value>
- <value>native</value>
- <value>emulate</value>
- <value>paravirt</value>
- <value>smpsafe</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="present">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- <empty/>
- </element>
- </define>
- <define name="catchup">
- <element name="catchup">
- <optional>
- <attribute name="threshold">
- <ref name="unsignedInt"/>
- </attribute>
- <attribute name="slew">
- <ref name="unsignedInt"/>
- </attribute>
- <attribute name="limit">
- <ref name="unsignedInt"/>
- </attribute>
- </optional>
- </element>
- </define>
-<!--
- A bootloader may be used to extract the OS information instead of
- defining the OS parameter in the instance. It points just to the
- binary or script used to extract the data from the first disk device.
- -->
- <define name="bootloader">
- <interleave>
- <element name="bootloader">
- <choice>
- <ref name="absFilePath"/>
- <empty/>
- </choice>
- </element>
- <optional>
- <element name="bootloader_args">
- <text/>
- </element>
- </optional>
- </interleave>
- </define>
- <define name="osbootkernel">
- <interleave>
- <optional>
- <element name="kernel">
- <ref name="absFilePath"/>
- </element>
- </optional>
- <optional>
- <element name="initrd">
- <ref name="absFilePath"/>
- </element>
- </optional>
- <optional>
- <element name="root">
- <ref name="absFilePath"/>
- </element>
- </optional>
- <optional>
- <element name="cmdline">
- <text/>
- </element>
- </optional>
- </interleave>
- </define>
- <define name="osbootdev">
- <element name="boot">
- <attribute name="dev">
- <choice>
- <value>hd</value>
- <value>fd</value>
- <value>cdrom</value>
- <value>network</value>
- </choice>
- </attribute>
- <empty/>
- </element>
- </define>
- <define name="diskspec">
- <optional>
- <ref name="driver"/>
- </optional>
- <ref name="target"/>
- <optional>
- <ref name="deviceBoot"/>
- </optional>
- <optional>
- <element name="readonly">
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="shareable">
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="serial">
- <ref name="diskSerial"/>
- </element>
- </optional>
- <optional>
- <ref name="encryption"/>
- </optional>
- <optional>
- <ref name="address"/>
- </optional>
- </define>
-
- <define name="lease">
- <element name="lease">
- <interleave>
- <element name="lockspace">
- <text/>
- </element>
- <element name="key">
- <text/>
- </element>
- <element name="target">
- <attribute name="path">
- <text/>
- </attribute>
- <optional>
- <attribute name="offset">
- <ref name="unsignedInt"/>
- </attribute>
- </optional>
- </element>
- </interleave>
- </element>
- </define>
- <!--
- A disk description can be either of type file or block
- The name of the attribute on the source element depends on the type
-
- -->
- <define name="disk">
- <element name="disk">
- <optional>
- <attribute name="device">
- <choice>
- <value>floppy</value>
- <value>disk</value>
- <value>cdrom</value>
- </choice>
- </attribute>
- </optional>
- <choice>
- <group>
- <attribute name="type">
- <value>file</value>
- </attribute>
- <interleave>
- <optional>
- <element name="source">
- <attribute name="file">
- <ref name="absFilePath"/>
- </attribute>
- <empty/>
- </element>
- </optional>
- <ref name="diskspec"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>block</value>
- </attribute>
- <interleave>
- <optional>
- <element name="source">
- <attribute name="dev">
- <ref name="absFilePath"/>
- </attribute>
- <empty/>
- </element>
- </optional>
- <ref name="diskspec"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>dir</value>
- </attribute>
- <interleave>
- <optional>
- <element name="source">
- <attribute name="dir">
- <ref name="absFilePath"/>
- </attribute>
- <empty/>
- </element>
- </optional>
- <ref name="diskspec"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>network</value>
- </attribute>
- <interleave>
- <optional>
- <element name="source">
- <attribute name="protocol">
- <choice>
- <value>nbd</value>
- <value>rbd</value>
- <value>sheepdog</value>
- </choice>
- </attribute>
- <optional>
- <attribute name="name"/>
- </optional>
- <zeroOrMore>
- <element name="host">
- <attribute name="name">
- <ref name="dnsName"/>
- </attribute>
- <attribute name="port">
- <ref name="unsignedInt"/>
- </attribute>
- </element>
- </zeroOrMore>
- <empty/>
- </element>
- </optional>
- <ref name="diskspec"/>
- </interleave>
- </group>
- <ref name="diskspec"/>
- </choice>
- </element>
- </define>
- <define name="target">
- <element name="target">
- <attribute name="dev">
- <ref name="deviceName"/>
- </attribute>
- <optional>
- <attribute name="bus">
- <choice>
- <value>ide</value>
- <value>fdc</value>
- <value>scsi</value>
- <value>virtio</value>
- <value>xen</value>
- <value>usb</value>
- <value>uml</value>
- </choice>
- </attribute>
- </optional>
- </element>
- </define>
- <!--
- Disk may use a special driver for access. Currently this is
- only defined for Xen for tap/aio and file, but will certainly be
- extended in the future, and libvirt doesn't look for specific values.
- -->
- <define name="driver">
- <element name="driver">
- <choice>
- <group>
- <ref name="driverFormat"/>
- <optional>
- <ref name="driverCache"/>
- </optional>
- </group>
- <group>
- <optional>
- <ref name="driverFormat"/>
- </optional>
- <ref name="driverCache"/>
- </group>
- </choice>
- <optional>
- <ref name="driverErrorPolicy"/>
- </optional>
- <optional>
- <ref name="driverIO"/>
- </optional>
- <optional>
- <ref name="ioeventfd"/>
- </optional>
- <optional>
- <ref name="event_idx"/>
- </optional>
- <empty/>
- </element>
- </define>
- <define name="driverFormat">
- <attribute name="name">
- <ref name="genericName"/>
- </attribute>
- <optional>
- <attribute name="type">
- <ref name="genericName"/>
- </attribute>
- </optional>
- </define>
- <define name="driverCache">
- <attribute name="cache">
- <choice>
- <value>none</value>
- <value>writeback</value>
- <value>writethrough</value>
- <value>directsync</value>
- </choice>
- </attribute>
- </define>
- <define name="driverErrorPolicy">
- <attribute name="error_policy">
- <choice>
- <value>stop</value>
- <value>ignore</value>
- <value>enospace</value>
- </choice>
- </attribute>
- </define>
- <define name="driverIO">
- <attribute name="io">
- <choice>
- <value>threads</value>
- <value>native</value>
- </choice>
- </attribute>
- </define>
- <define name="ioeventfd">
- <attribute name="ioeventfd">
- <choice>
- <value>on</value>
- <value>off</value>
- </choice>
- </attribute>
- </define>
- <define name="event_idx">
- <attribute name="event_idx">
- <choice>
- <value>on</value>
- <value>off</value>
- </choice>
- </attribute>
- </define>
- <define name="controller">
- <element name="controller">
- <choice>
- <group>
- <optional>
- <attribute name="type">
- <choice>
- <value>fdc</value>
- <value>ide</value>
- <value>scsi</value>
- <value>sata</value>
- <value>ccid</value>
- <value>usb</value>
- </choice>
- </attribute>
- </optional>
- </group>
- <!-- virtio-serial can have 2 additional attributes -->
- <group>
- <attribute name="type">
- <value>virtio-serial</value>
- </attribute>
- <optional>
- <attribute name="ports">
- <ref name="unsignedInt"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="vectors">
- <ref name="unsignedInt"/>
- </attribute>
- </optional>
- </group>
- </choice>
- <attribute name="index">
- <ref name="unsignedInt"/>
- </attribute>
- <optional>
- <attribute name="model">
- <choice>
- <value>auto</value>
- <value>buslogic</value>
- <value>lsilogic</value>
- <value>lsisas1068</value>
- <value>vmpvscsi</value>
- <value>piix3-uhci</value>
- <value>piix4-uhci</value>
- <value>ehci</value>
- <value>ich9-ehci1</value>
- <value>ich9-uhci1</value>
- <value>ich9-uhci2</value>
- <value>ich9-uhci3</value>
- <value>vt82c686b-uhci</value>
- <value>pci-ohci</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <ref name="usbmaster"/>
- </optional>
- <optional>
- <ref name="address"/>
- </optional>
- </element>
- </define>
- <define name="filesystem">
- <element name="filesystem">
- <choice>
- <group>
- <attribute name="type">
- <value>file</value>
- </attribute>
- <interleave>
- <element name="source">
- <attribute name="file">
- <ref name="absFilePath"/>
- </attribute>
- <empty/>
- </element>
- <ref name="filesystemtgt"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>block</value>
- </attribute>
- <interleave>
- <element name="source">
- <attribute name="dev">
- <ref name="absFilePath"/>
- </attribute>
- <empty/>
- </element>
- <ref name="filesystemtgt"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>mount</value>
- </attribute>
- <interleave>
- <element name="source">
- <attribute name="dir">
- <ref name="absFilePath"/>
- </attribute>
- <empty/>
- </element>
- <ref name="filesystemtgt"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>template</value>
- </attribute>
- <interleave>
- <element name="source">
- <attribute name="name">
- <ref name="genericName"/>
- </attribute>
- <empty/>
- </element>
- <ref name="filesystemtgt"/>
- </interleave>
- </group>
- </choice>
- <optional>
- <ref name="address"/>
- <attribute name="accessmode">
- <choice>
- <value>passthrough</value>
- <value>mapped</value>
- <value>squash</value>
- </choice>
- </attribute>
- </optional>
- </element>
- </define>
- <define name="filesystemtgt">
- <element name="target">
- <attribute name="dir">
- <ref name="absDirPath"/>
- </attribute>
- <empty/>
- </element>
- </define>
- <!--
- An interface description can either be of type bridge in which case
- it will use a bridging source, or of type ethernet which uses a device
- source and a device target instead. They both share a set of interface
- options. FIXME
- -->
- <define name="interface">
- <element name="interface">
- <choice>
- <group>
- <attribute name="type">
- <value>bridge</value>
- </attribute>
- <interleave>
- <optional>
- <element name="source">
- <attribute name="bridge">
- <ref name="deviceName"/>
- </attribute>
- <empty/>
- </element>
- </optional>
- <ref name="interface-options"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>ethernet</value>
- </attribute>
- <interleave>
- <optional>
- <element name="source">
- <attribute name="dev">
- <ref name="deviceName"/>
- </attribute>
- <empty/>
- </element>
- </optional>
- <ref name="interface-options"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>network</value>
- </attribute>
- <interleave>
- <element name="source">
- <attribute name="network">
- <ref name="deviceName"/>
- </attribute>
- <optional>
- <attribute name="portgroup">
- <ref name="deviceName"/>
- </attribute>
- </optional>
- <empty/>
- </element>
- <optional>
- <ref name="virtualPortProfile"/>
- </optional>
- <ref name="interface-options"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>direct</value>
- </attribute>
- <interleave>
- <element name="source">
- <attribute name="dev">
- <ref name="deviceName"/>
- </attribute>
- <optional>
- <attribute name="mode">
- <ref name="bridgeMode"/>
- </attribute>
- </optional>
- <empty/>
- </element>
- <optional>
- <ref name="virtualPortProfile"/>
- </optional>
- <ref name="interface-options"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>user</value>
- </attribute>
- <interleave>
- <ref name="interface-options"/>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>internal</value>
- </attribute>
- <interleave>
- <element name="source">
- <attribute name="name">
- <ref name="deviceName"/>
- </attribute>
- <empty/>
- </element>
- <ref name="interface-options"/>
- </interleave>
- </group>
- </choice>
- </element>
- </define>
- <!--
- The interface options possible are:
- - the MAC address
- - the IP address bound to the interface
- - the name of the script used to set up the binding
- - the target device used
- - boot order
- -->
- <define name="interface-options">
- <interleave>
- <optional>
- <element name="target">
- <attribute name="dev">
- <ref name="deviceName"/>
- </attribute>
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="mac">
- <attribute name="address">
- <ref name="macAddr"/>
- </attribute>
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="ip">
- <attribute name="address">
- <ref name="ipv4Addr"/>
- </attribute>
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="script">
- <attribute name="path">
- <ref name="filePath"/>
- </attribute>
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="model">
- <attribute name="type"/>
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="driver">
- <optional>
- <attribute name="name">
- <choice>
- <value>qemu</value>
- <value>vhost</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="txmode">
- <choice>
- <value>iothread</value>
- <value>timer</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <ref name="ioeventfd"/>
- </optional>
- <optional>
- <ref name="event_idx"/>
- </optional>
- <empty/>
- </element>
- </optional>
- <optional>
- <ref name="address"/>
- </optional>
- <optional>
- <element name="filterref">
- <ref name="filterref-node-attributes"/>
- </element>
- </optional>
- <optional>
- <element name="tune">
- <optional>
- <!-- size of send buffer for network tap devices -->
- <element name="sndbuf">
- <ref name="unsignedInt"/>
- </element>
- </optional>
- </element>
- </optional>
- <optional>
- <ref name="deviceBoot"/>
- </optional>
- <optional>
- <ref name="bandwidth"/>
- </optional>
- </interleave>
- </define>
- <!--
- An emulator description is just a path to the binary used for the task
- -->
- <define name="emulator">
- <element name="emulator">
- <ref name="absFilePath"/>
- </element>
- </define>
- <!--
- A graphic description, currently in Xen only 2 types are supported:
- - sdl with optional display, xauth and fullscreen
- - vnc with a required port and optional listen IP address, password
- and keymap
- -->
- <define name="graphic">
- <element name="graphics">
- <choice>
- <group>
- <attribute name="type">
- <value>sdl</value>
- </attribute>
- <optional>
- <attribute name="display">
- <text/>
- </attribute>
- </optional>
- <optional>
- <attribute name="xauth">
- <text/>
- </attribute>
- </optional>
- <optional>
- <attribute name="fullscreen">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- </group>
- <group>
- <attribute name="type">
- <value>vnc</value>
- </attribute>
- <choice>
- <group>
- <optional>
- <attribute name="port">
- <ref name="PortNumber"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="autoport">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="listen">
- <ref name="addrIPorName"/>
- </attribute>
- </optional>
- </group>
- <group>
- <optional>
- <attribute name="socket">
- <ref name="absFilePath"/>
- </attribute>
- </optional>
- </group>
- </choice>
- <optional>
- <attribute name="passwd">
- <text/>
- </attribute>
- </optional>
- <optional>
- <attribute name="keymap">
- <text/>
- </attribute>
- </optional>
- <optional>
- <attribute name="passwdValidTo">
- <data type="dateTime"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="connected">
- <choice>
- <value>keep</value>
- </choice>
- </attribute>
- </optional>
- <ref name="listenElements"/>
- </group>
- <group>
- <attribute name="type">
- <value>spice</value>
- </attribute>
- <optional>
- <attribute name="port">
- <ref name="PortNumber"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="tlsPort">
- <ref name="PortNumber"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="autoport">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="listen">
- <ref name="addrIPorName"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="passwd">
- <text/>
- </attribute>
- </optional>
- <optional>
- <attribute name="keymap">
- <text/>
- </attribute>
- </optional>
- <optional>
- <attribute name="passwdValidTo">
- <data type="dateTime"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="connected">
- <choice>
- <value>fail</value>
- <value>disconnect</value>
- <value>keep</value>
- </choice>
- </attribute>
- </optional>
- <interleave>
- <ref name="listenElements"/>
- <zeroOrMore>
- <element name="channel">
- <attribute name="name">
- <choice>
- <value>main</value>
- <value>display</value>
- <value>inputs</value>
- <value>cursor</value>
- <value>playback</value>
- <value>record</value>
- <value>smartcard</value>
- </choice>
- </attribute>
- <attribute name="mode">
- <choice>
- <value>any</value>
- <value>secure</value>
- <value>insecure</value>
- </choice>
- </attribute>
- <empty/>
- </element>
- </zeroOrMore>
- <optional>
- <element name="image">
- <attribute name="compression">
- <choice>
- <value>auto_glz</value>
- <value>auto_lz</value>
- <value>quic</value>
- <value>glz</value>
- <value>lz</value>
- <value>off</value>
- </choice>
- </attribute>
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="jpeg">
- <attribute name="compression">
- <choice>
- <value>auto</value>
- <value>never</value>
- <value>always</value>
- </choice>
- </attribute>
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="zlib">
- <attribute name="compression">
- <choice>
- <value>auto</value>
- <value>never</value>
- <value>always</value>
- </choice>
- </attribute>
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="playback">
- <attribute name="compression">
- <choice>
- <value>on</value>
- <value>off</value>
- </choice>
- </attribute>
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="streaming">
- <attribute name="mode">
- <choice>
- <value>filter</value>
- <value>all</value>
- <value>off</value>
- </choice>
- </attribute>
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="clipboard">
- <attribute name="copypaste">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- <empty/>
- </element>
- </optional>
- </interleave>
- </group>
- <group>
- <attribute name="type">
- <value>rdp</value>
- </attribute>
- <optional>
- <attribute name="port">
- <ref name="PortNumber"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="autoport">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="replaceUser">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="multiUser">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="listen">
- <ref name="addrIPorName"/>
- </attribute>
- </optional>
- <ref name="listenElements"/>
- </group>
- <group>
- <attribute name="type">
- <value>desktop</value>
- </attribute>
- <optional>
- <attribute name="display">
- <text/>
- </attribute>
- </optional>
- <optional>
- <attribute name="fullscreen">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- </group>
- </choice>
- </element>
- </define>
-
- <define name="listenElements">
- <zeroOrMore>
- <element name="listen">
- <choice>
- <group>
- <attribute name="type">
- <value>address</value>
- </attribute>
- <attribute name="address">
- <ref name="addrIPorName"/>
- </attribute>
- </group>
- <group>
- <attribute name="type">
- <value>network</value>
- </attribute>
- <attribute name="network">
- <text/>
- </attribute>
- <optional>
- <attribute name="address">
- <ref name="addrIPorName"/>
- </attribute>
- </optional>
- </group>
- </choice>
- </element>
- </zeroOrMore>
- </define>
- <!--
- A video adapter description, allowing configuration of device
- model, number of virtual heads, and video ram size
- -->
- <define name="video">
- <element name="video">
- <optional>
- <element name="model">
- <attribute name="type">
- <choice>
- <value>vga</value>
- <value>cirrus</value>
- <value>vmvga</value>
- <value>xen</value>
- <value>vbox</value>
- <value>qxl</value>
- </choice>
- </attribute>
- <optional>
- <attribute name="vram">
- <ref name="unsignedInt"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="heads">
- <ref name="unsignedInt"/>
- </attribute>
- </optional>
- <optional>
- <element name="acceleration">
- <optional>
- <attribute name="accel3d">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <attribute name="accel2d">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- </element>
- </optional>
- </element>
- </optional>
- <optional>
- <ref name="address"/>
- </optional>
- </element>
- </define>
- <!--
- When a domain terminates multiple policies can be applied depending
- on how it ended:
- -->
- <define name="termination">
- <interleave>
- <optional>
- <element name="on_reboot">
- <ref name="offOptions"/>
- </element>
- </optional>
- <optional>
- <element name="on_poweroff">
- <ref name="offOptions"/>
- </element>
- </optional>
- <optional>
- <element name="on_crash">
- <ref name="crashOptions"/>
- </element>
- </optional>
- </interleave>
- </define>
- <!--
- Options when a domain terminates:
- destroy: The domain is cleaned up
- restart: A new domain is started in place of the old one
- preserve: The domain will remain in memory until it is destroyed manually
- rename-restart: a variant of the previous one but where the old domain is
- renamed before being saved to allow a restart
- -->
- <define name="offOptions">
- <choice>
- <value>destroy</value>
- <value>restart</value>
- <value>preserve</value>
- <value>rename-restart</value>
- </choice>
- </define>
- <!--
- Options when a domain crashes:
- destroy: The domain is cleaned up
- restart: A new domain is started in place of the old one
- preserve: The domain will remain in memory until it is destroyed manually
- rename-restart: a variant of the previous one but where the old domain is
- renamed before being saved to allow a restart
- coredump-destroy: The crashed domain's core will be dumped, and then the
- domain will be terminated completely and all resources
- released
- coredump-restart: The crashed domain's core will be dumped, and then the
- domain will be restarted with the same configuration
- -->
- <define name="crashOptions">
- <choice>
- <value>destroy</value>
- <value>restart</value>
- <value>preserve</value>
- <value>rename-restart</value>
- <value>coredump-destroy</value>
- <value>coredump-restart</value>
- </choice>
- </define>
- <!--
- Specific setup for a qemu emulated character device. Note: this
- definition doesn't fully specify the constraints on this node.
- -->
- <define name="qemucdev">
- <ref name="qemucdevSrcType"/>
- <optional>
- <attribute name="tty">
- <ref name="absFilePath"/>
- </attribute>
- </optional>
- <interleave>
- <ref name="qemucdevSrcDef"/>
- <optional>
- <ref name="qemucdevTgtDef"/>
- </optional>
- <optional>
- <ref name="address"/>
- </optional>
- </interleave>
- </define>
-
- <define name="qemucdevConsoleTgtType">
- <attribute name="type">
- <choice>
- <value>xen</value>
- <value>serial</value>
- <value>uml</value>
- <value>virtio</value>
- </choice>
- </attribute>
- </define>
-
- <define name="qemucdevTgtDef">
- <element name="target">
- <interleave>
- <optional>
- <ref name="qemucdevConsoleTgtType"/>
- </optional>
- <optional>
- <attribute name="port"/>
- </optional>
- </interleave>
- </element>
- </define>
-
- <define name="qemucdevSrcTypeChoice">
- <choice>
- <value>dev</value>
- <value>file</value>
- <value>pipe</value>
- <value>unix</value>
- <value>tcp</value>
- <value>udp</value>
- <value>null</value>
- <value>stdio</value>
- <value>vc</value>
- <value>pty</value>
- <value>spicevmc</value>
- </choice>
- </define>
-
- <define name="qemucdevSrcType">
- <attribute name="type">
- <ref name="qemucdevSrcTypeChoice"/>
- </attribute>
- </define>
- <define name="qemucdevSrcDef">
- <zeroOrMore>
- <element name="source">
- <optional>
- <attribute name="mode"/>
- </optional>
- <optional>
- <attribute name="path"/>
- </optional>
- <optional>
- <attribute name="host"/>
- </optional>
- <optional>
- <attribute name="service"/>
- </optional>
- <optional>
- <attribute name="wiremode"/>
- </optional>
- </element>
- </zeroOrMore>
- <optional>
- <element name="protocol">
- <optional>
- <attribute name="type">
- <choice>
- <value>raw</value>
- <value>telnet</value>
- <value>telnets</value>
- <value>tls</value>
- </choice>
- </attribute>
- </optional>
- </element>
- </optional>
- </define>
- <!--
- The description for a console
- just a tty device
- -->
- <define name="console">
- <element name="console">
- <choice>
- <group>
- <optional>
- <attribute name="tty">
- <ref name="absFilePath"/>
- </attribute>
- </optional>
- <empty/>
- </group>
- <choice>
- <ref name="qemucdev"/>
- </choice>
- </choice>
- </element>
- </define>
- <define name="sound">
- <element name="sound">
- <attribute name="model">
- <choice>
- <value>sb16</value>
- <value>es1370</value>
- <value>pcspk</value>
- <value>ac97</value>
- <value>ich6</value>
- </choice>
- </attribute>
- <optional>
- <ref name="address"/>
- </optional>
- </element>
- </define>
- <define name="watchdog">
- <element name="watchdog">
- <attribute name="model">
- <choice>
- <value>i6300esb</value>
- <value>ib700</value>
- </choice>
- </attribute>
- <optional>
- <attribute name="action">
- <choice>
- <value>reset</value>
- <value>shutdown</value>
- <value>poweroff</value>
- <value>pause</value>
- <value>none</value>
- <value>dump</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <ref name="address"/>
- </optional>
- </element>
- </define>
- <define name="memballoon">
- <element name="memballoon">
- <attribute name="model">
- <choice>
- <value>virtio</value>
- <value>xen</value>
- <value>none</value>
- </choice>
- </attribute>
- <optional>
- <ref name="address"/>
- </optional>
- </element>
- </define>
- <define name="parallel">
- <element name="parallel">
- <ref name="qemucdev"/>
- </element>
- </define>
- <define name="serial">
- <element name="serial">
- <ref name="qemucdev"/>
- </element>
- </define>
- <define name="guestfwdTarget">
- <element name="target">
- <attribute name="type">
- <value>guestfwd</value>
- </attribute>
- <attribute name="address"/>
- <attribute name="port"/>
- </element>
- </define>
- <define name="virtioTarget">
- <element name="target">
- <attribute name="type">
- <value>virtio</value>
- </attribute>
- <optional>
- <attribute name="name"/>
- </optional>
- </element>
- </define>
- <define name="channel">
- <element name="channel">
- <ref name="qemucdevSrcType"/>
- <interleave>
- <ref name="qemucdevSrcDef"/>
- <choice>
- <ref name="guestfwdTarget"/>
- <ref name="virtioTarget"/>
- </choice>
- <optional>
- <ref name="address"/>
- </optional>
- </interleave>
- </element>
- </define>
- <define name="smartcard">
- <element name="smartcard">
- <choice>
- <group>
- <attribute name="mode">
- <value>host</value>
- </attribute>
- <!-- might need to add optional database element here later -->
- </group>
- <group>
- <attribute name="mode">
- <value>host-certificates</value>
- </attribute>
- <ref name='certificate'/>
- <ref name='certificate'/>
- <ref name='certificate'/>
- <optional>
- <element name="database">
- <ref name="absDirPath"/>
- </element>
- </optional>
- </group>
- <group>
- <attribute name="mode">
- <value>passthrough</value>
- </attribute>
- <ref name="qemucdevSrcType"/>
- <interleave>
- <ref name="qemucdevSrcDef"/>
- <optional>
- <ref name="qemucdevTgtDef"/>
- </optional>
- </interleave>
- </group>
- </choice>
- <optional>
- <ref name="address"/>
- </optional>
- </element>
- </define>
- <define name="certificate">
- <element name="certificate">
- <text/>
- </element>
- </define>
- <define name="input">
- <element name="input">
- <attribute name="type">
- <choice>
- <value>tablet</value>
- <value>mouse</value>
- </choice>
- </attribute>
- <optional>
- <attribute name="bus">
- <choice>
- <value>ps2</value>
- <value>usb</value>
- <value>xen</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <ref name="address"/>
- </optional>
- </element>
- </define>
- <define name="hub">
- <element name="hub">
- <attribute name="type">
- <choice>
- <value>usb</value>
- </choice>
- </attribute>
- <optional>
- <ref name="address"/>
- </optional>
- </element>
- </define>
- <define name="redirdev">
- <element name="redirdev">
- <attribute name="bus">
- <choice>
- <value>usb</value>
- </choice>
- </attribute>
- <attribute name="type">
- <ref name="qemucdevSrcTypeChoice"/>
- </attribute>
- <ref name="qemucdevSrcDef"/>
- </element>
- </define>
- <define name="hostdev">
- <element name="hostdev">
- <optional>
- <attribute name="mode">
- <choice>
- <value>subsystem</value>
- <value>capabilities</value>
- </choice>
- </attribute>
- </optional>
- <attribute name="type">
- <choice>
- <value>usb</value>
- <value>pci</value>
- </choice>
- </attribute>
- <optional>
- <attribute name="managed">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </optional>
- <group>
- <element name="source">
- <choice>
- <group>
- <ref name="usbproduct"/>
- <optional>
- <ref name="usbaddress"/>
- </optional>
- </group>
- <ref name="usbaddress"/>
- <element name="address">
- <ref name="pciaddress"/>
- </element>
- </choice>
- </element>
- </group>
- <optional>
- <ref name="deviceBoot"/>
- </optional>
- <optional>
- <ref name="address"/>
- </optional>
- </element>
- </define>
- <define name="usbproduct">
- <element name="vendor">
- <attribute name="id">
- <ref name="usbId"/>
- </attribute>
- </element>
- <element name="product">
- <attribute name="id">
- <ref name="usbId"/>
- </attribute>
- </element>
- </define>
- <define name="usbaddress">
- <element name="address">
- <attribute name="bus">
- <ref name="usbAddr"/>
- </attribute>
- <attribute name="device">
- <ref name="usbPort"/>
- </attribute>
- </element>
- </define>
- <define name="usbportaddress">
- <attribute name="bus">
- <ref name="usbAddr"/>
- </attribute>
- <attribute name="port">
- <ref name="usbPort"/>
- </attribute>
- </define>
- <define name="pciaddress">
- <optional>
- <attribute name="domain">
- <ref name="pciDomain"/>
- </attribute>
- </optional>
- <attribute name="bus">
- <ref name="pciBus"/>
- </attribute>
- <attribute name="slot">
- <ref name="pciSlot"/>
- </attribute>
- <attribute name="function">
- <ref name="pciFunc"/>
- </attribute>
- </define>
- <define name="driveaddress">
- <optional>
- <attribute name="controller">
- <ref name="driveController"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="bus">
- <ref name="driveBus"/>
- </attribute>
- </optional>
- <attribute name="unit">
- <ref name="driveUnit"/>
- </attribute>
- </define>
- <define name="virtioserialaddress">
- <attribute name="controller">
- <ref name="driveController"/>
- </attribute>
- <optional>
- <attribute name="bus">
- <ref name="driveBus"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="port">
- <ref name="driveUnit"/>
- </attribute>
- </optional>
- </define>
- <define name="ccidaddress">
- <attribute name="controller">
- <ref name="driveController"/>
- </attribute>
- <optional>
- <attribute name="slot">
- <ref name="driveUnit"/>
- </attribute>
- </optional>
- </define>
- <!--
- Devices attached to a domain.
- Sub-elements such as <alias> are not documented here, as they
- can only exist when generated for a live domain and are ignored
- when defining a domain.
- -->
- <define name="devices">
- <element name="devices">
- <interleave>
- <optional>
- <ref name="emulator"/>
- </optional>
- <zeroOrMore>
- <choice>
- <ref name="disk"/>
- <ref name="controller"/>
- <ref name="lease"/>
- <ref name="filesystem"/>
- <ref name="interface"/>
- <ref name="input"/>
- <ref name="sound"/>
- <ref name="hostdev"/>
- <ref name="graphic"/>
- <ref name="video"/>
- <ref name="console"/>
- <ref name="parallel"/>
- <ref name="serial"/>
- <ref name="channel"/>
- <ref name="smartcard"/>
- <ref name="hub"/>
- <ref name="redirdev"/>
- </choice>
- </zeroOrMore>
- <optional>
- <ref name="watchdog"/>
- </optional>
- <optional>
- <ref name="memballoon"/>
- </optional>
- </interleave>
- </element>
- </define>
- <!--
- A set of optional features: PAE, APIC, ACPI, and HAP support
- -->
- <define name="features">
- <optional>
- <element name="features">
- <interleave>
- <optional>
- <element name="pae">
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="apic">
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="acpi">
- <empty/>
- </element>
- </optional>
- <optional>
- <element name="hap">
- <empty/>
- </element>
- </optional>
- </interleave>
- </element>
- </optional>
- </define>
- <!--
- CPU specification
- -->
- <define name="cpu">
- <element name="cpu">
- <choice>
- <ref name="cpuTopology"/>
- <group>
- <ref name="cpuMatch"/>
- <interleave>
- <ref name="cpuModel"/>
- <optional>
- <ref name="cpuVendor"/>
- </optional>
- <optional>
- <ref name="cpuTopology"/>
- </optional>
- <zeroOrMore>
- <ref name="cpuFeature"/>
- </zeroOrMore>
- </interleave>
- </group>
- </choice>
- </element>
- </define>
-
- <define name="cpuMatch">
- <attribute name="match">
- <choice>
- <value>minimum</value>
- <value>exact</value>
- <value>strict</value>
- </choice>
- </attribute>
- </define>
-
- <define name="cpuModel">
- <element name="model">
- <text/>
- </element>
- </define>
-
- <define name="cpuVendor">
- <element name="vendor">
- <text/>
- </element>
- </define>
-
- <define name="cpuFeature">
- <element name="feature">
- <attribute name="policy">
- <choice>
- <value>force</value>
- <value>require</value>
- <value>optional</value>
- <value>disable</value>
- <value>forbid</value>
- </choice>
- </attribute>
- <attribute name="name">
- <ref name="featureName"/>
- </attribute>
- <empty/>
- </element>
- </define>
-
- <define name="cpuTopology">
- <element name="topology">
- <attribute name="sockets">
- <ref name="positiveInteger"/>
- </attribute>
- <attribute name="cores">
- <ref name="positiveInteger"/>
- </attribute>
- <attribute name="threads">
- <ref name="positiveInteger"/>
- </attribute>
- </element>
- </define>
-
- <!--
- System information specification:
- Placeholder for system specific informations likes the ones
- contained in the SMBIOS area.
- Only a limited subset of entries can be modified there, so we
- fully enumerate each case here.
- The DMTF spec doesn't specify any string subset, just 0 terminated
- byte strings, but better be safe and restrict at least the names
- to avoid problems with space normalization in attribute values,
- the value is kept as the element body for maximum flexibility.
- A priori we allow only type 0 and type 1 string updates
- -->
- <define name="sysinfo">
- <element name="sysinfo">
- <attribute name="type">
- <value>smbios</value>
- </attribute>
- <interleave>
- <optional>
- <element name="bios">
- <oneOrMore>
- <element name="entry">
- <attribute name="name">
- <ref name="sysinfo-bios-name"/>
- </attribute>
- <ref name="sysinfo-value"/>
- </element>
- </oneOrMore>
- </element>
- </optional>
- <optional>
- <element name="system">
- <oneOrMore>
- <element name="entry">
- <attribute name="name">
- <ref name="sysinfo-system-name"/>
- </attribute>
- <ref name="sysinfo-value"/>
- </element>
- </oneOrMore>
- </element>
- </optional>
- </interleave>
- </element>
- </define>
-
- <define name="sysinfo-bios-name">
- <choice>
- <value>vendor</value>
- <value>version</value>
- <value>date</value>
- <value>release</value>
- </choice>
- </define>
-
- <define name="sysinfo-system-name">
- <choice>
- <value>manufacturer</value>
- <value>product</value>
- <value>version</value>
- <value>serial</value>
- <value>uuid</value>
- <value>sku</value>
- <value>family</value>
- </choice>
- </define>
-
- <define name="sysinfo-value">
- <data type="string">
- <param name='pattern'>[a-zA-Z0-9/\-_\. \(\)]+</param>
- </data>
- </define>
-
- <define name="smbios">
- <element name="smbios">
- <attribute name="mode">
- <choice>
- <value>emulate</value>
- <value>host</value>
- <value>sysinfo</value>
- </choice>
- </attribute>
- <empty/>
- </element>
- </define>
-
- <define name="bios">
- <element name="bios">
- <attribute name="useserial">
- <choice>
- <value>yes</value>
- <value>no</value>
- </choice>
- </attribute>
- </element>
- </define>
-
- <define name="address">
- <element name="address">
- <choice>
- <group>
- <attribute name="type">
- <value>pci</value>
- </attribute>
- <ref name="pciaddress"/>
- </group>
- <group>
- <attribute name="type">
- <value>drive</value>
- </attribute>
- <ref name="driveaddress"/>
- </group>
- <group>
- <attribute name="type">
- <value>virtio-serial</value>
- </attribute>
- <ref name="virtioserialaddress"/>
- </group>
- <group>
- <attribute name="type">
- <value>ccid</value>
- </attribute>
- <ref name="ccidaddress"/>
- </group>
- <group>
- <attribute name="type">
- <value>usb</value>
- </attribute>
- <ref name="usbportaddress"/>
- </group>
- </choice>
- </element>
- </define>
-
- <define name="usbmaster">
- <element name="master">
- <attribute name="startport">
- <ref name="usbPort"/>
- </attribute>
- <empty/>
- </element>
- </define>
-
- <define name="filterref-node-attributes">
- <attribute name="filter">
- <data type="NCName"/>
- </attribute>
- <optional>
- <element name="parameter">
- <attribute name="name">
- <ref name="filter-param-name"/>
- </attribute>
- <attribute name="value">
- <ref name="filter-param-value"/>
- </attribute>
- </element>
- </optional>
- </define>
-
- <define name="deviceBoot">
- <element name="boot">
- <attribute name="order">
- <ref name="positiveInteger"/>
- </attribute>
- <empty/>
- </element>
- </define>
-
- <!--
- Optional hypervisor extensions in their own namespace:
- QEmu
- -->
- <define name="qemucmdline">
- <element name="commandline" ns="http://libvirt.org/schemas/domain/qemu/1.0">
- <zeroOrMore>
- <element name="arg">
- <attribute name='value'/>
- </element>
- </zeroOrMore>
- <zeroOrMore>
- <element name="env">
- <attribute name='name'>
- <ref name="filter-param-name"/>
- </attribute>
- <optional>
- <attribute name='value'/>
- </optional>
- <empty/>
- </element>
- </zeroOrMore>
- </element>
- </define>
-
- <!--
- Type library
-
- A domain name should be made of ascii, numbers, _-+ and is non-empty
- memoryKB request at least 4Mbytes though Xen will grow bigger if too low
- weight currently is in range [100, 1000]
- -->
- <define name="cpuset">
- <data type="string">
- <param name="pattern">([0-9]+(-[0-9]+)?|\^[0-9]+)(,([0-9]+(-[0-9]+)?|\^[0-9]+))*</param>
- </data>
- </define>
- <define name="countCPU">
- <data type="unsignedShort">
- <param name="pattern">[0-9]+</param>
- <param name="minInclusive">1</param>
- </data>
- </define>
- <define name="vcpuid">
- <data type="unsignedShort">
- <param name="pattern">[0-9]+</param>
- </data>
- </define>
- <define name="cpushares">
- <data type="unsignedInt">
- <param name="pattern">[0-9]+</param>
- </data>
- </define>
- <define name="cpuperiod">
- <data type="unsignedLong">
- <param name="pattern">[0-9]+</param>
- <param name="minInclusive">1000</param>
- <param name="maxInclusive">1000000</param>
- </data>
- </define>
- <define name="cpuquota">
- <data type="long">
- <param name="pattern">-?[0-9]+</param>
- <param name="maxInclusive">18446744073709551</param>
- <param name='minInclusive'>-1</param>
- </data>
- </define>
- <define name="PortNumber">
- <data type="short">
- <param name="minInclusive">-1</param>
- </data>
- </define>
- <define name="weight">
- <data type="unsignedInt">
- <param name="pattern">[0-9]+</param>
- <param name="minInclusive">100</param>
- <param name="maxInclusive">1000</param>
- </data>
- </define>
- <define name="memoryKB">
- <data type="unsignedInt">
- <param name="pattern">[0-9]+</param>
- <param name="minInclusive">4000</param>
- </data>
- </define>
- <define name="domainName">
- <data type="string">
- <param name="pattern">[A-Za-z0-9_\.\+\-&:/]+</param>
- </data>
- </define>
- <define name="diskSerial">
- <data type="string">
- <param name="pattern">[A-Za-z0-9_\.\+\-]+</param>
- </data>
- </define>
- <define name="genericName">
- <data type="string">
- <param name="pattern">[a-zA-Z0-9_\+\-]+</param>
- </data>
- </define>
- <define name="bridgeMode">
- <data type="string">
- <param name="pattern">(vepa|bridge|private|passthrough)</param>
- </data>
- </define>
- <define name="addrIPorName">
- <data type="string">
- <param name="pattern">(([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9])|(([0-9a-fA-F]+|:)+[0-9a-fA-F]+)|([a-zA-Z0-9_\.\+\-]*)</param>
- </data>
- </define>
- <define name="usbId">
- <data type="string">
- <param name="pattern">(0x)?[0-9a-fA-F]{1,4}</param>
- </data>
- </define>
- <define name="usbAddr">
- <data type="string">
- <param name="pattern">(0x)?[0-9a-fA-F]{1,3}</param>
- </data>
- </define>
- <define name="usbPort">
- <data type="string">
- <param name="pattern">((0x)?[0-9a-fA-F]{1,3}\.){0,3}(0x)?[0-9a-fA-F]{1,3}</param>
- </data>
- </define>
- <define name="pciDomain">
- <data type="string">
- <param name="pattern">(0x)?[0-9a-fA-F]{1,4}</param>
- </data>
- </define>
- <define name="pciBus">
- <data type="string">
- <param name="pattern">(0x)?[0-9a-fA-F]{1,2}</param>
- </data>
- </define>
- <define name="pciSlot">
- <data type="string">
- <param name="pattern">(0x)?[0-1]?[0-9a-fA-F]</param>
- </data>
- </define>
- <define name="pciFunc">
- <data type="string">
- <param name="pattern">(0x)?[0-7]</param>
- </data>
- </define>
- <define name="driveController">
- <data type="string">
- <param name="pattern">[0-9]{1,2}</param>
- </data>
- </define>
- <define name="driveBus">
- <data type="string">
- <param name="pattern">[0-9]{1,2}</param>
- </data>
- </define>
- <define name="driveUnit">
- <data type="string">
- <param name="pattern">[0-9]{1,2}</param>
- </data>
- </define>
- <define name="featureName">
- <data type="string">
- <param name='pattern'>[a-zA-Z0-9\-_]+</param>
- </data>
- </define>
- <define name="timeDelta">
- <data type="string">
- <param name="pattern">(-|\+)?[0-9]+</param>
- </data>
- </define>
- <define name="timeZone">
- <data type="string">
- <param name="pattern">[a-zA-Z0-9_\.\+\-/]+</param>
- </data>
- </define>
- <define name="filter-param-name">
- <data type="string">
- <param name="pattern">[a-zA-Z0-9_]+</param>
- </data>
- </define>
- <define name="filter-param-value">
- <data type="string">
- <param name="pattern">[a-zA-Z0-9_\.:]+</param>
- </data>
- </define>
+ <include href='domaincommon.rng'/>
</grammar>
--- /dev/null
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- domain-related definitions used in multiple grammars -->
+ <include href='basictypes.rng'/>
+ <include href='storageencryption.rng'/>
+ <include href='networkcommon.rng'/>
+
+ <!--
+ description element, may be placed anywhere under the root
+ -->
+ <define name="description">
+ <element name="description">
+ <text/>
+ </element>
+ </define>
+
+ <!--
+ We handle only document defining a domain
+ -->
+ <define name="domain">
+ <element name="domain">
+ <ref name="hvs"/>
+ <ref name="ids"/>
+ <interleave>
+ <optional>
+ <ref name="description"/>
+ </optional>
+ <optional>
+ <ref name="cpu"/>
+ </optional>
+ <optional>
+ <ref name="sysinfo"/>
+ </optional>
+ <ref name="os"/>
+ <ref name="clock"/>
+ <ref name="resources"/>
+ <ref name="features"/>
+ <ref name="termination"/>
+ <optional>
+ <ref name="devices"/>
+ </optional>
+ <optional>
+ <ref name="seclabel"/>
+ </optional>
+ <optional>
+ <ref name='qemucmdline'/>
+ </optional>
+ </interleave>
+ </element>
+ </define>
+ <define name="seclabel">
+ <element name="seclabel">
+ <attribute name="model">
+ <text/>
+ </attribute>
+ <attribute name="type">
+ <choice>
+ <value>dynamic</value>
+ <value>static</value>
+ </choice>
+ </attribute>
+ <attribute name="relabel">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ <element name="label">
+ <text/>
+ </element>
+ <element name="imagelabel">
+ <text/>
+ </element>
+ <element name="baselabel">
+ <text/>
+ </element>
+ </element>
+ </define>
+ <define name="hvs">
+ <attribute name="type">
+ <choice>
+ <value>xen</value>
+ <value>kvm</value>
+ <value>kqemu</value>
+ <value>qemu</value>
+ <value>lxc</value>
+ <value>openvz</value>
+ <value>test</value>
+ </choice>
+ </attribute>
+ </define>
+ <define name="os">
+ <choice>
+ <ref name="osxen"/>
+ <ref name="oshvm"/>
+ <ref name="osexe"/>
+ </choice>
+ </define>
+ <define name="osxen">
+ <choice>
+ <group>
+ <optional>
+ <ref name="bootloader"/>
+ </optional>
+ <element name="os">
+ <ref name="ostypexen"/>
+ <ref name="osbootkernel"/>
+ </element>
+ </group>
+ <group>
+ <ref name="bootloader"/>
+ <optional>
+ <element name="os">
+ <ref name="ostypexen"/>
+ <optional>
+ <ref name="osbootkernel"/>
+ </optional>
+ </element>
+ </optional>
+ </group>
+ </choice>
+ </define>
+ <define name="oshvm">
+ <element name="os">
+ <ref name="ostypehvm"/>
+ <interleave>
+ <optional>
+ <element name="loader">
+ <ref name="absFilePath"/>
+ </element>
+ </optional>
+ <choice>
+ <ref name="osbootkernel"/>
+ <zeroOrMore>
+ <ref name="osbootdev"/>
+ </zeroOrMore>
+ </choice>
+ <optional>
+ <element name="bootmenu">
+ <attribute name="enable">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </element>
+ </optional>
+ <optional>
+ <ref name="smbios"/>
+ </optional>
+ <optional>
+ <ref name="bios"/>
+ </optional>
+ </interleave>
+ </element>
+ </define>
+ <define name="ostypexen">
+ <element name="type">
+ <optional>
+ <attribute name="arch">
+ <choice>
+ <value>i686</value>
+ <value>x86_64</value>
+ <value>ia64</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="machine">
+ <choice>
+ <value>xenpv</value>
+ <value>xenner</value>
+ </choice>
+ </attribute>
+ </optional>
+ <choice>
+ <value>xen</value>
+ <value>linux</value>
+ </choice>
+ </element>
+ </define>
+ <define name="ostypehvm">
+ <element name="type">
+ <optional>
+ <choice>
+ <ref name="hvmx86"/>
+ <ref name="hvmmips"/>
+ <ref name="hvmsparc"/>
+ <ref name="hvmppc"/>
+ </choice>
+ </optional>
+ <value>hvm</value>
+ </element>
+ </define>
+ <define name="hvmx86">
+ <group>
+ <optional>
+ <attribute name="arch">
+ <choice>
+ <value>i686</value>
+ <value>x86_64</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="machine">
+ <data type="string">
+ <param name="pattern">[a-zA-Z0-9_\.\-]+</param>
+ </data>
+ </attribute>
+ </optional>
+ </group>
+ </define>
+ <define name="hvmmips">
+ <group>
+ <optional>
+ <attribute name="arch">
+ <value>mips</value>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="machine">
+ <value>mips</value>
+ </attribute>
+ </optional>
+ </group>
+ </define>
+ <define name="hvmsparc">
+ <group>
+ <optional>
+ <attribute name="arch">
+ <value>sparc</value>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="machine">
+ <value>sun4m</value>
+ </attribute>
+ </optional>
+ </group>
+ </define>
+ <define name="hvmppc">
+ <group>
+ <optional>
+ <attribute name="arch">
+ <value>ppc</value>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="machine">
+ <choice>
+ <value>g3beige</value>
+ <value>mac99</value>
+ <value>prep</value>
+ </choice>
+ </attribute>
+ </optional>
+ </group>
+ </define>
+ <define name="osexe">
+ <element name="os">
+ <element name="type">
+ <value>exe</value>
+ </element>
+ <interleave>
+ <optional>
+ <element name="init">
+ <ref name="absFilePath"/>
+ </element>
+ </optional>
+ </interleave>
+ </element>
+ </define>
+ <!--
+ The Identifiers can be:
+ - an optional id attribute with a number on the domain element
+ - a mandatory name
+ - an optional uuid
+ -->
+ <define name="ids">
+ <optional>
+ <attribute name="id">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </optional>
+ <interleave>
+ <element name="name">
+ <ref name="domainName"/>
+ </element>
+ <optional>
+ <element name="uuid">
+ <ref name="UUID"/>
+ </element>
+ </optional>
+ </interleave>
+ </define>
+ <!--
+ Resources usage defines the amount of memory (maximum and possibly
+ current usage) and number of virtual CPUs used by that domain.
+ We can't check here the rule that currentMemory <= memory
+ -->
+ <define name="resources">
+ <interleave>
+ <element name="memory">
+ <ref name="memoryKB"/>
+ </element>
+ <optional>
+ <element name="currentMemory">
+ <ref name="memoryKB"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="memoryBacking">
+ <optional>
+ <element name="hugepages">
+ <empty/>
+ </element>
+ </optional>
+ </element>
+ </optional>
+
+ <!-- The Blkio cgroup related tunables would go in the blkiotune -->
+ <optional>
+ <element name="blkiotune">
+ <!-- I/O weight the VM can use -->
+ <optional>
+ <element name="weight">
+ <ref name="weight"/>
+ </element>
+ </optional>
+ </element>
+ </optional>
+
+ <!-- All the memory/swap related tunables would go in the memtune -->
+ <optional>
+ <element name="memtune">
+ <!-- Maximum memory the VM can use -->
+ <optional>
+ <element name="hard_limit">
+ <ref name="memoryKB"/>
+ </element>
+ </optional>
+ <!-- Minimum memory ascertained for the VM during contention -->
+ <optional>
+ <element name="soft_limit">
+ <ref name="memoryKB"/>
+ </element>
+ </optional>
+ <!-- Minimum amount of memory required to start the VM -->
+ <optional>
+ <element name="min_guarantee">
+ <ref name="memoryKB"/>
+ </element>
+ </optional>
+ <!-- Maximum swap area the VM can use -->
+ <optional>
+ <element name="swap_hard_limit">
+ <ref name="memoryKB"/>
+ </element>
+ </optional>
+ </element>
+ </optional>
+
+ <optional>
+ <element name="vcpu">
+ <optional>
+ <attribute name="cpuset">
+ <ref name="cpuset"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="current">
+ <ref name="countCPU"/>
+ </attribute>
+ </optional>
+ <ref name="countCPU"/>
+ </element>
+ </optional>
+
+ <!-- All the cpu related tunables would go in the cputune -->
+ <optional>
+ <element name="cputune">
+ <optional>
+ <element name="shares">
+ <ref name="cpushares"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="period">
+ <ref name="cpuperiod"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="quota">
+ <ref name="cpuquota"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="vcpupin">
+ <attribute name="vcpu">
+ <ref name="vcpuid"/>
+ </attribute>
+ <attribute name="cpuset">
+ <ref name="cpuset"/>
+ </attribute>
+ </element>
+ </zeroOrMore>
+ </element>
+ </optional>
+
+ <!-- All the NUMA related tunables would go in the numatune -->
+ <optional>
+ <element name="numatune">
+ <optional>
+ <element name="memory">
+ <attribute name="mode">
+ <choice>
+ <value>strict</value>
+ <value>preferred</value>
+ <value>interleave</value>
+ </choice>
+ </attribute>
+ <attribute name="nodeset">
+ <ref name="cpuset"/>
+ </attribute>
+ </element>
+ </optional>
+ </element>
+ </optional>
+ </interleave>
+ </define>
+ <define name="clock">
+ <optional>
+ <element name="clock">
+ <choice>
+ <attribute name="offset">
+ <value>localtime</value>
+ </attribute>
+ <attribute name="offset">
+ <value>utc</value>
+ </attribute>
+ <group>
+ <attribute name="offset">
+ <value>timezone</value>
+ </attribute>
+ <optional>
+ <attribute name="timezone">
+ <ref name="timeZone"/>
+ </attribute>
+ </optional>
+ </group>
+ <group>
+ <attribute name="offset">
+ <value>variable</value>
+ </attribute>
+ <optional>
+ <attribute name="adjustment">
+ <ref name="timeDelta"/>
+ </attribute>
+ </optional>
+ </group>
+ </choice>
+ <zeroOrMore>
+ <ref name="timer"/>
+ </zeroOrMore>
+ </element>
+ </optional>
+ </define>
+ <define name="timer">
+ <element name="timer">
+ <attribute name="name">
+ <choice>
+ <value>platform</value>
+ <value>pit</value>
+ <value>rtc</value>
+ <value>hpet</value>
+ <value>tsc</value>
+ </choice>
+ </attribute>
+ <optional>
+ <attribute name="track">
+ <choice>
+ <value>boot</value>
+ <value>guest</value>
+ <value>wall</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tickpolicy">
+ <choice>
+ <value>delay</value>
+ <value>catchup</value>
+ <value>merge</value>
+ <value>discard</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <ref name="catchup"/>
+ </optional>
+ <optional>
+ <attribute name="frequency">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="mode">
+ <choice>
+ <value>auto</value>
+ <value>native</value>
+ <value>emulate</value>
+ <value>paravirt</value>
+ <value>smpsafe</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="present">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ <empty/>
+ </element>
+ </define>
+ <define name="catchup">
+ <element name="catchup">
+ <optional>
+ <attribute name="threshold">
+ <ref name="unsignedInt"/>
+ </attribute>
+ <attribute name="slew">
+ <ref name="unsignedInt"/>
+ </attribute>
+ <attribute name="limit">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </optional>
+ </element>
+ </define>
+<!--
+ A bootloader may be used to extract the OS information instead of
+ defining the OS parameter in the instance. It points just to the
+ binary or script used to extract the data from the first disk device.
+ -->
+ <define name="bootloader">
+ <interleave>
+ <element name="bootloader">
+ <choice>
+ <ref name="absFilePath"/>
+ <empty/>
+ </choice>
+ </element>
+ <optional>
+ <element name="bootloader_args">
+ <text/>
+ </element>
+ </optional>
+ </interleave>
+ </define>
+ <define name="osbootkernel">
+ <interleave>
+ <optional>
+ <element name="kernel">
+ <ref name="absFilePath"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="initrd">
+ <ref name="absFilePath"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="root">
+ <ref name="absFilePath"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cmdline">
+ <text/>
+ </element>
+ </optional>
+ </interleave>
+ </define>
+ <define name="osbootdev">
+ <element name="boot">
+ <attribute name="dev">
+ <choice>
+ <value>hd</value>
+ <value>fd</value>
+ <value>cdrom</value>
+ <value>network</value>
+ </choice>
+ </attribute>
+ <empty/>
+ </element>
+ </define>
+ <define name="diskspec">
+ <optional>
+ <ref name="driver"/>
+ </optional>
+ <ref name="target"/>
+ <optional>
+ <ref name="deviceBoot"/>
+ </optional>
+ <optional>
+ <element name="readonly">
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shareable">
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="serial">
+ <ref name="diskSerial"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="encryption"/>
+ </optional>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </define>
+
+ <define name="lease">
+ <element name="lease">
+ <interleave>
+ <element name="lockspace">
+ <text/>
+ </element>
+ <element name="key">
+ <text/>
+ </element>
+ <element name="target">
+ <attribute name="path">
+ <text/>
+ </attribute>
+ <optional>
+ <attribute name="offset">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </optional>
+ </element>
+ </interleave>
+ </element>
+ </define>
+ <!--
+ A disk description can be either of type file or block
+ The name of the attribute on the source element depends on the type
+
+ -->
+ <define name="disk">
+ <element name="disk">
+ <optional>
+ <attribute name="device">
+ <choice>
+ <value>floppy</value>
+ <value>disk</value>
+ <value>cdrom</value>
+ </choice>
+ </attribute>
+ </optional>
+ <choice>
+ <group>
+ <attribute name="type">
+ <value>file</value>
+ </attribute>
+ <interleave>
+ <optional>
+ <element name="source">
+ <attribute name="file">
+ <ref name="absFilePath"/>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <ref name="diskspec"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>block</value>
+ </attribute>
+ <interleave>
+ <optional>
+ <element name="source">
+ <attribute name="dev">
+ <ref name="absFilePath"/>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <ref name="diskspec"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>dir</value>
+ </attribute>
+ <interleave>
+ <optional>
+ <element name="source">
+ <attribute name="dir">
+ <ref name="absFilePath"/>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <ref name="diskspec"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>network</value>
+ </attribute>
+ <interleave>
+ <optional>
+ <element name="source">
+ <attribute name="protocol">
+ <choice>
+ <value>nbd</value>
+ <value>rbd</value>
+ <value>sheepdog</value>
+ </choice>
+ </attribute>
+ <optional>
+ <attribute name="name"/>
+ </optional>
+ <zeroOrMore>
+ <element name="host">
+ <attribute name="name">
+ <ref name="dnsName"/>
+ </attribute>
+ <attribute name="port">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </element>
+ </zeroOrMore>
+ <empty/>
+ </element>
+ </optional>
+ <ref name="diskspec"/>
+ </interleave>
+ </group>
+ <ref name="diskspec"/>
+ </choice>
+ </element>
+ </define>
+ <define name="target">
+ <element name="target">
+ <attribute name="dev">
+ <ref name="deviceName"/>
+ </attribute>
+ <optional>
+ <attribute name="bus">
+ <choice>
+ <value>ide</value>
+ <value>fdc</value>
+ <value>scsi</value>
+ <value>virtio</value>
+ <value>xen</value>
+ <value>usb</value>
+ <value>uml</value>
+ </choice>
+ </attribute>
+ </optional>
+ </element>
+ </define>
+ <!--
+ Disk may use a special driver for access. Currently this is
+ only defined for Xen for tap/aio and file, but will certainly be
+ extended in the future, and libvirt doesn't look for specific values.
+ -->
+ <define name="driver">
+ <element name="driver">
+ <choice>
+ <group>
+ <ref name="driverFormat"/>
+ <optional>
+ <ref name="driverCache"/>
+ </optional>
+ </group>
+ <group>
+ <optional>
+ <ref name="driverFormat"/>
+ </optional>
+ <ref name="driverCache"/>
+ </group>
+ </choice>
+ <optional>
+ <ref name="driverErrorPolicy"/>
+ </optional>
+ <optional>
+ <ref name="driverIO"/>
+ </optional>
+ <optional>
+ <ref name="ioeventfd"/>
+ </optional>
+ <optional>
+ <ref name="event_idx"/>
+ </optional>
+ <empty/>
+ </element>
+ </define>
+ <define name="driverFormat">
+ <attribute name="name">
+ <ref name="genericName"/>
+ </attribute>
+ <optional>
+ <attribute name="type">
+ <ref name="genericName"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="driverCache">
+ <attribute name="cache">
+ <choice>
+ <value>none</value>
+ <value>writeback</value>
+ <value>writethrough</value>
+ <value>directsync</value>
+ </choice>
+ </attribute>
+ </define>
+ <define name="driverErrorPolicy">
+ <attribute name="error_policy">
+ <choice>
+ <value>stop</value>
+ <value>ignore</value>
+ <value>enospace</value>
+ </choice>
+ </attribute>
+ </define>
+ <define name="driverIO">
+ <attribute name="io">
+ <choice>
+ <value>threads</value>
+ <value>native</value>
+ </choice>
+ </attribute>
+ </define>
+ <define name="ioeventfd">
+ <attribute name="ioeventfd">
+ <choice>
+ <value>on</value>
+ <value>off</value>
+ </choice>
+ </attribute>
+ </define>
+ <define name="event_idx">
+ <attribute name="event_idx">
+ <choice>
+ <value>on</value>
+ <value>off</value>
+ </choice>
+ </attribute>
+ </define>
+ <define name="controller">
+ <element name="controller">
+ <choice>
+ <group>
+ <optional>
+ <attribute name="type">
+ <choice>
+ <value>fdc</value>
+ <value>ide</value>
+ <value>scsi</value>
+ <value>sata</value>
+ <value>ccid</value>
+ <value>usb</value>
+ </choice>
+ </attribute>
+ </optional>
+ </group>
+ <!-- virtio-serial can have 2 additional attributes -->
+ <group>
+ <attribute name="type">
+ <value>virtio-serial</value>
+ </attribute>
+ <optional>
+ <attribute name="ports">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vectors">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </optional>
+ </group>
+ </choice>
+ <attribute name="index">
+ <ref name="unsignedInt"/>
+ </attribute>
+ <optional>
+ <attribute name="model">
+ <choice>
+ <value>auto</value>
+ <value>buslogic</value>
+ <value>lsilogic</value>
+ <value>lsisas1068</value>
+ <value>vmpvscsi</value>
+ <value>piix3-uhci</value>
+ <value>piix4-uhci</value>
+ <value>ehci</value>
+ <value>ich9-ehci1</value>
+ <value>ich9-uhci1</value>
+ <value>ich9-uhci2</value>
+ <value>ich9-uhci3</value>
+ <value>vt82c686b-uhci</value>
+ <value>pci-ohci</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <ref name="usbmaster"/>
+ </optional>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </element>
+ </define>
+ <define name="filesystem">
+ <element name="filesystem">
+ <choice>
+ <group>
+ <attribute name="type">
+ <value>file</value>
+ </attribute>
+ <interleave>
+ <element name="source">
+ <attribute name="file">
+ <ref name="absFilePath"/>
+ </attribute>
+ <empty/>
+ </element>
+ <ref name="filesystemtgt"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>block</value>
+ </attribute>
+ <interleave>
+ <element name="source">
+ <attribute name="dev">
+ <ref name="absFilePath"/>
+ </attribute>
+ <empty/>
+ </element>
+ <ref name="filesystemtgt"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>mount</value>
+ </attribute>
+ <interleave>
+ <element name="source">
+ <attribute name="dir">
+ <ref name="absFilePath"/>
+ </attribute>
+ <empty/>
+ </element>
+ <ref name="filesystemtgt"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>template</value>
+ </attribute>
+ <interleave>
+ <element name="source">
+ <attribute name="name">
+ <ref name="genericName"/>
+ </attribute>
+ <empty/>
+ </element>
+ <ref name="filesystemtgt"/>
+ </interleave>
+ </group>
+ </choice>
+ <optional>
+ <ref name="address"/>
+ <attribute name="accessmode">
+ <choice>
+ <value>passthrough</value>
+ <value>mapped</value>
+ <value>squash</value>
+ </choice>
+ </attribute>
+ </optional>
+ </element>
+ </define>
+ <define name="filesystemtgt">
+ <element name="target">
+ <attribute name="dir">
+ <ref name="absDirPath"/>
+ </attribute>
+ <empty/>
+ </element>
+ </define>
+ <!--
+ An interface description can either be of type bridge in which case
+ it will use a bridging source, or of type ethernet which uses a device
+ source and a device target instead. They both share a set of interface
+ options. FIXME
+ -->
+ <define name="interface">
+ <element name="interface">
+ <choice>
+ <group>
+ <attribute name="type">
+ <value>bridge</value>
+ </attribute>
+ <interleave>
+ <optional>
+ <element name="source">
+ <attribute name="bridge">
+ <ref name="deviceName"/>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <ref name="interface-options"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>ethernet</value>
+ </attribute>
+ <interleave>
+ <optional>
+ <element name="source">
+ <attribute name="dev">
+ <ref name="deviceName"/>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <ref name="interface-options"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>network</value>
+ </attribute>
+ <interleave>
+ <element name="source">
+ <attribute name="network">
+ <ref name="deviceName"/>
+ </attribute>
+ <optional>
+ <attribute name="portgroup">
+ <ref name="deviceName"/>
+ </attribute>
+ </optional>
+ <empty/>
+ </element>
+ <optional>
+ <ref name="virtualPortProfile"/>
+ </optional>
+ <ref name="interface-options"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>direct</value>
+ </attribute>
+ <interleave>
+ <element name="source">
+ <attribute name="dev">
+ <ref name="deviceName"/>
+ </attribute>
+ <optional>
+ <attribute name="mode">
+ <ref name="bridgeMode"/>
+ </attribute>
+ </optional>
+ <empty/>
+ </element>
+ <optional>
+ <ref name="virtualPortProfile"/>
+ </optional>
+ <ref name="interface-options"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>user</value>
+ </attribute>
+ <interleave>
+ <ref name="interface-options"/>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>internal</value>
+ </attribute>
+ <interleave>
+ <element name="source">
+ <attribute name="name">
+ <ref name="deviceName"/>
+ </attribute>
+ <empty/>
+ </element>
+ <ref name="interface-options"/>
+ </interleave>
+ </group>
+ </choice>
+ </element>
+ </define>
+ <!--
+ The interface options possible are:
+ - the MAC address
+ - the IP address bound to the interface
+ - the name of the script used to set up the binding
+ - the target device used
+ - boot order
+ -->
+ <define name="interface-options">
+ <interleave>
+ <optional>
+ <element name="target">
+ <attribute name="dev">
+ <ref name="deviceName"/>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mac">
+ <attribute name="address">
+ <ref name="macAddr"/>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ip">
+ <attribute name="address">
+ <ref name="ipv4Addr"/>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="script">
+ <attribute name="path">
+ <ref name="filePath"/>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="model">
+ <attribute name="type"/>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="driver">
+ <optional>
+ <attribute name="name">
+ <choice>
+ <value>qemu</value>
+ <value>vhost</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="txmode">
+ <choice>
+ <value>iothread</value>
+ <value>timer</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <ref name="ioeventfd"/>
+ </optional>
+ <optional>
+ <ref name="event_idx"/>
+ </optional>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ <optional>
+ <element name="filterref">
+ <ref name="filterref-node-attributes"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tune">
+ <optional>
+ <!-- size of send buffer for network tap devices -->
+ <element name="sndbuf">
+ <ref name="unsignedInt"/>
+ </element>
+ </optional>
+ </element>
+ </optional>
+ <optional>
+ <ref name="deviceBoot"/>
+ </optional>
+ <optional>
+ <ref name="bandwidth"/>
+ </optional>
+ </interleave>
+ </define>
+ <!--
+ An emulator description is just a path to the binary used for the task
+ -->
+ <define name="emulator">
+ <element name="emulator">
+ <ref name="absFilePath"/>
+ </element>
+ </define>
+ <!--
+ A graphic description, currently in Xen only 2 types are supported:
+ - sdl with optional display, xauth and fullscreen
+ - vnc with a required port and optional listen IP address, password
+ and keymap
+ -->
+ <define name="graphic">
+ <element name="graphics">
+ <choice>
+ <group>
+ <attribute name="type">
+ <value>sdl</value>
+ </attribute>
+ <optional>
+ <attribute name="display">
+ <text/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="xauth">
+ <text/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fullscreen">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>vnc</value>
+ </attribute>
+ <choice>
+ <group>
+ <optional>
+ <attribute name="port">
+ <ref name="PortNumber"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="autoport">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="listen">
+ <ref name="addrIPorName"/>
+ </attribute>
+ </optional>
+ </group>
+ <group>
+ <optional>
+ <attribute name="socket">
+ <ref name="absFilePath"/>
+ </attribute>
+ </optional>
+ </group>
+ </choice>
+ <optional>
+ <attribute name="passwd">
+ <text/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="keymap">
+ <text/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="passwdValidTo">
+ <data type="dateTime"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="connected">
+ <choice>
+ <value>keep</value>
+ </choice>
+ </attribute>
+ </optional>
+ <ref name="listenElements"/>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>spice</value>
+ </attribute>
+ <optional>
+ <attribute name="port">
+ <ref name="PortNumber"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tlsPort">
+ <ref name="PortNumber"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="autoport">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="listen">
+ <ref name="addrIPorName"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="passwd">
+ <text/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="keymap">
+ <text/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="passwdValidTo">
+ <data type="dateTime"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="connected">
+ <choice>
+ <value>fail</value>
+ <value>disconnect</value>
+ <value>keep</value>
+ </choice>
+ </attribute>
+ </optional>
+ <interleave>
+ <ref name="listenElements"/>
+ <zeroOrMore>
+ <element name="channel">
+ <attribute name="name">
+ <choice>
+ <value>main</value>
+ <value>display</value>
+ <value>inputs</value>
+ <value>cursor</value>
+ <value>playback</value>
+ <value>record</value>
+ <value>smartcard</value>
+ </choice>
+ </attribute>
+ <attribute name="mode">
+ <choice>
+ <value>any</value>
+ <value>secure</value>
+ <value>insecure</value>
+ </choice>
+ </attribute>
+ <empty/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="image">
+ <attribute name="compression">
+ <choice>
+ <value>auto_glz</value>
+ <value>auto_lz</value>
+ <value>quic</value>
+ <value>glz</value>
+ <value>lz</value>
+ <value>off</value>
+ </choice>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="jpeg">
+ <attribute name="compression">
+ <choice>
+ <value>auto</value>
+ <value>never</value>
+ <value>always</value>
+ </choice>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="zlib">
+ <attribute name="compression">
+ <choice>
+ <value>auto</value>
+ <value>never</value>
+ <value>always</value>
+ </choice>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="playback">
+ <attribute name="compression">
+ <choice>
+ <value>on</value>
+ <value>off</value>
+ </choice>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="streaming">
+ <attribute name="mode">
+ <choice>
+ <value>filter</value>
+ <value>all</value>
+ <value>off</value>
+ </choice>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="clipboard">
+ <attribute name="copypaste">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ <empty/>
+ </element>
+ </optional>
+ </interleave>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>rdp</value>
+ </attribute>
+ <optional>
+ <attribute name="port">
+ <ref name="PortNumber"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="autoport">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="replaceUser">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="multiUser">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="listen">
+ <ref name="addrIPorName"/>
+ </attribute>
+ </optional>
+ <ref name="listenElements"/>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>desktop</value>
+ </attribute>
+ <optional>
+ <attribute name="display">
+ <text/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fullscreen">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ </group>
+ </choice>
+ </element>
+ </define>
+
+ <define name="listenElements">
+ <zeroOrMore>
+ <element name="listen">
+ <choice>
+ <group>
+ <attribute name="type">
+ <value>address</value>
+ </attribute>
+ <attribute name="address">
+ <ref name="addrIPorName"/>
+ </attribute>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>network</value>
+ </attribute>
+ <attribute name="network">
+ <text/>
+ </attribute>
+ <optional>
+ <attribute name="address">
+ <ref name="addrIPorName"/>
+ </attribute>
+ </optional>
+ </group>
+ </choice>
+ </element>
+ </zeroOrMore>
+ </define>
+ <!--
+ A video adapter description, allowing configuration of device
+ model, number of virtual heads, and video ram size
+ -->
+ <define name="video">
+ <element name="video">
+ <optional>
+ <element name="model">
+ <attribute name="type">
+ <choice>
+ <value>vga</value>
+ <value>cirrus</value>
+ <value>vmvga</value>
+ <value>xen</value>
+ <value>vbox</value>
+ <value>qxl</value>
+ </choice>
+ </attribute>
+ <optional>
+ <attribute name="vram">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="heads">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <element name="acceleration">
+ <optional>
+ <attribute name="accel3d">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="accel2d">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ </element>
+ </optional>
+ </element>
+ </optional>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </element>
+ </define>
+ <!--
+ When a domain terminates multiple policies can be applied depending
+ on how it ended:
+ -->
+ <define name="termination">
+ <interleave>
+ <optional>
+ <element name="on_reboot">
+ <ref name="offOptions"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="on_poweroff">
+ <ref name="offOptions"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="on_crash">
+ <ref name="crashOptions"/>
+ </element>
+ </optional>
+ </interleave>
+ </define>
+ <!--
+ Options when a domain terminates:
+ destroy: The domain is cleaned up
+ restart: A new domain is started in place of the old one
+ preserve: The domain will remain in memory until it is destroyed manually
+ rename-restart: a variant of the previous one but where the old domain is
+ renamed before being saved to allow a restart
+ -->
+ <define name="offOptions">
+ <choice>
+ <value>destroy</value>
+ <value>restart</value>
+ <value>preserve</value>
+ <value>rename-restart</value>
+ </choice>
+ </define>
+ <!--
+ Options when a domain crashes:
+ destroy: The domain is cleaned up
+ restart: A new domain is started in place of the old one
+ preserve: The domain will remain in memory until it is destroyed manually
+ rename-restart: a variant of the previous one but where the old domain is
+ renamed before being saved to allow a restart
+ coredump-destroy: The crashed domain's core will be dumped, and then the
+ domain will be terminated completely and all resources
+ released
+ coredump-restart: The crashed domain's core will be dumped, and then the
+ domain will be restarted with the same configuration
+ -->
+ <define name="crashOptions">
+ <choice>
+ <value>destroy</value>
+ <value>restart</value>
+ <value>preserve</value>
+ <value>rename-restart</value>
+ <value>coredump-destroy</value>
+ <value>coredump-restart</value>
+ </choice>
+ </define>
+ <!--
+ Specific setup for a qemu emulated character device. Note: this
+ definition doesn't fully specify the constraints on this node.
+ -->
+ <define name="qemucdev">
+ <ref name="qemucdevSrcType"/>
+ <optional>
+ <attribute name="tty">
+ <ref name="absFilePath"/>
+ </attribute>
+ </optional>
+ <interleave>
+ <ref name="qemucdevSrcDef"/>
+ <optional>
+ <ref name="qemucdevTgtDef"/>
+ </optional>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </interleave>
+ </define>
+
+ <define name="qemucdevConsoleTgtType">
+ <attribute name="type">
+ <choice>
+ <value>xen</value>
+ <value>serial</value>
+ <value>uml</value>
+ <value>virtio</value>
+ </choice>
+ </attribute>
+ </define>
+
+ <define name="qemucdevTgtDef">
+ <element name="target">
+ <interleave>
+ <optional>
+ <ref name="qemucdevConsoleTgtType"/>
+ </optional>
+ <optional>
+ <attribute name="port"/>
+ </optional>
+ </interleave>
+ </element>
+ </define>
+
+ <define name="qemucdevSrcTypeChoice">
+ <choice>
+ <value>dev</value>
+ <value>file</value>
+ <value>pipe</value>
+ <value>unix</value>
+ <value>tcp</value>
+ <value>udp</value>
+ <value>null</value>
+ <value>stdio</value>
+ <value>vc</value>
+ <value>pty</value>
+ <value>spicevmc</value>
+ </choice>
+ </define>
+
+ <define name="qemucdevSrcType">
+ <attribute name="type">
+ <ref name="qemucdevSrcTypeChoice"/>
+ </attribute>
+ </define>
+ <define name="qemucdevSrcDef">
+ <zeroOrMore>
+ <element name="source">
+ <optional>
+ <attribute name="mode"/>
+ </optional>
+ <optional>
+ <attribute name="path"/>
+ </optional>
+ <optional>
+ <attribute name="host"/>
+ </optional>
+ <optional>
+ <attribute name="service"/>
+ </optional>
+ <optional>
+ <attribute name="wiremode"/>
+ </optional>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="protocol">
+ <optional>
+ <attribute name="type">
+ <choice>
+ <value>raw</value>
+ <value>telnet</value>
+ <value>telnets</value>
+ <value>tls</value>
+ </choice>
+ </attribute>
+ </optional>
+ </element>
+ </optional>
+ </define>
+ <!--
+ The description for a console
+ just a tty device
+ -->
+ <define name="console">
+ <element name="console">
+ <choice>
+ <group>
+ <optional>
+ <attribute name="tty">
+ <ref name="absFilePath"/>
+ </attribute>
+ </optional>
+ <empty/>
+ </group>
+ <choice>
+ <ref name="qemucdev"/>
+ </choice>
+ </choice>
+ </element>
+ </define>
+ <define name="sound">
+ <element name="sound">
+ <attribute name="model">
+ <choice>
+ <value>sb16</value>
+ <value>es1370</value>
+ <value>pcspk</value>
+ <value>ac97</value>
+ <value>ich6</value>
+ </choice>
+ </attribute>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </element>
+ </define>
+ <define name="watchdog">
+ <element name="watchdog">
+ <attribute name="model">
+ <choice>
+ <value>i6300esb</value>
+ <value>ib700</value>
+ </choice>
+ </attribute>
+ <optional>
+ <attribute name="action">
+ <choice>
+ <value>reset</value>
+ <value>shutdown</value>
+ <value>poweroff</value>
+ <value>pause</value>
+ <value>none</value>
+ <value>dump</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </element>
+ </define>
+ <define name="memballoon">
+ <element name="memballoon">
+ <attribute name="model">
+ <choice>
+ <value>virtio</value>
+ <value>xen</value>
+ <value>none</value>
+ </choice>
+ </attribute>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </element>
+ </define>
+ <define name="parallel">
+ <element name="parallel">
+ <ref name="qemucdev"/>
+ </element>
+ </define>
+ <define name="serial">
+ <element name="serial">
+ <ref name="qemucdev"/>
+ </element>
+ </define>
+ <define name="guestfwdTarget">
+ <element name="target">
+ <attribute name="type">
+ <value>guestfwd</value>
+ </attribute>
+ <attribute name="address"/>
+ <attribute name="port"/>
+ </element>
+ </define>
+ <define name="virtioTarget">
+ <element name="target">
+ <attribute name="type">
+ <value>virtio</value>
+ </attribute>
+ <optional>
+ <attribute name="name"/>
+ </optional>
+ </element>
+ </define>
+ <define name="channel">
+ <element name="channel">
+ <ref name="qemucdevSrcType"/>
+ <interleave>
+ <ref name="qemucdevSrcDef"/>
+ <choice>
+ <ref name="guestfwdTarget"/>
+ <ref name="virtioTarget"/>
+ </choice>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </interleave>
+ </element>
+ </define>
+ <define name="smartcard">
+ <element name="smartcard">
+ <choice>
+ <group>
+ <attribute name="mode">
+ <value>host</value>
+ </attribute>
+ <!-- might need to add optional database element here later -->
+ </group>
+ <group>
+ <attribute name="mode">
+ <value>host-certificates</value>
+ </attribute>
+ <ref name='certificate'/>
+ <ref name='certificate'/>
+ <ref name='certificate'/>
+ <optional>
+ <element name="database">
+ <ref name="absDirPath"/>
+ </element>
+ </optional>
+ </group>
+ <group>
+ <attribute name="mode">
+ <value>passthrough</value>
+ </attribute>
+ <ref name="qemucdevSrcType"/>
+ <interleave>
+ <ref name="qemucdevSrcDef"/>
+ <optional>
+ <ref name="qemucdevTgtDef"/>
+ </optional>
+ </interleave>
+ </group>
+ </choice>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </element>
+ </define>
+ <define name="certificate">
+ <element name="certificate">
+ <text/>
+ </element>
+ </define>
+ <define name="input">
+ <element name="input">
+ <attribute name="type">
+ <choice>
+ <value>tablet</value>
+ <value>mouse</value>
+ </choice>
+ </attribute>
+ <optional>
+ <attribute name="bus">
+ <choice>
+ <value>ps2</value>
+ <value>usb</value>
+ <value>xen</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </element>
+ </define>
+ <define name="hub">
+ <element name="hub">
+ <attribute name="type">
+ <choice>
+ <value>usb</value>
+ </choice>
+ </attribute>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </element>
+ </define>
+ <define name="redirdev">
+ <element name="redirdev">
+ <attribute name="bus">
+ <choice>
+ <value>usb</value>
+ </choice>
+ </attribute>
+ <attribute name="type">
+ <ref name="qemucdevSrcTypeChoice"/>
+ </attribute>
+ <ref name="qemucdevSrcDef"/>
+ </element>
+ </define>
+ <define name="hostdev">
+ <element name="hostdev">
+ <optional>
+ <attribute name="mode">
+ <choice>
+ <value>subsystem</value>
+ <value>capabilities</value>
+ </choice>
+ </attribute>
+ </optional>
+ <attribute name="type">
+ <choice>
+ <value>usb</value>
+ <value>pci</value>
+ </choice>
+ </attribute>
+ <optional>
+ <attribute name="managed">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ <group>
+ <element name="source">
+ <choice>
+ <group>
+ <ref name="usbproduct"/>
+ <optional>
+ <ref name="usbaddress"/>
+ </optional>
+ </group>
+ <ref name="usbaddress"/>
+ <element name="address">
+ <ref name="pciaddress"/>
+ </element>
+ </choice>
+ </element>
+ </group>
+ <optional>
+ <ref name="deviceBoot"/>
+ </optional>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </element>
+ </define>
+ <define name="usbproduct">
+ <element name="vendor">
+ <attribute name="id">
+ <ref name="usbId"/>
+ </attribute>
+ </element>
+ <element name="product">
+ <attribute name="id">
+ <ref name="usbId"/>
+ </attribute>
+ </element>
+ </define>
+ <define name="usbaddress">
+ <element name="address">
+ <attribute name="bus">
+ <ref name="usbAddr"/>
+ </attribute>
+ <attribute name="device">
+ <ref name="usbPort"/>
+ </attribute>
+ </element>
+ </define>
+ <define name="usbportaddress">
+ <attribute name="bus">
+ <ref name="usbAddr"/>
+ </attribute>
+ <attribute name="port">
+ <ref name="usbPort"/>
+ </attribute>
+ </define>
+ <define name="pciaddress">
+ <optional>
+ <attribute name="domain">
+ <ref name="pciDomain"/>
+ </attribute>
+ </optional>
+ <attribute name="bus">
+ <ref name="pciBus"/>
+ </attribute>
+ <attribute name="slot">
+ <ref name="pciSlot"/>
+ </attribute>
+ <attribute name="function">
+ <ref name="pciFunc"/>
+ </attribute>
+ </define>
+ <define name="driveaddress">
+ <optional>
+ <attribute name="controller">
+ <ref name="driveController"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="bus">
+ <ref name="driveBus"/>
+ </attribute>
+ </optional>
+ <attribute name="unit">
+ <ref name="driveUnit"/>
+ </attribute>
+ </define>
+ <define name="virtioserialaddress">
+ <attribute name="controller">
+ <ref name="driveController"/>
+ </attribute>
+ <optional>
+ <attribute name="bus">
+ <ref name="driveBus"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="port">
+ <ref name="driveUnit"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ccidaddress">
+ <attribute name="controller">
+ <ref name="driveController"/>
+ </attribute>
+ <optional>
+ <attribute name="slot">
+ <ref name="driveUnit"/>
+ </attribute>
+ </optional>
+ </define>
+ <!--
+ Devices attached to a domain.
+ Sub-elements such as <alias> are not documented here, as they
+ can only exist when generated for a live domain and are ignored
+ when defining a domain.
+ -->
+ <define name="devices">
+ <element name="devices">
+ <interleave>
+ <optional>
+ <ref name="emulator"/>
+ </optional>
+ <zeroOrMore>
+ <choice>
+ <ref name="disk"/>
+ <ref name="controller"/>
+ <ref name="lease"/>
+ <ref name="filesystem"/>
+ <ref name="interface"/>
+ <ref name="input"/>
+ <ref name="sound"/>
+ <ref name="hostdev"/>
+ <ref name="graphic"/>
+ <ref name="video"/>
+ <ref name="console"/>
+ <ref name="parallel"/>
+ <ref name="serial"/>
+ <ref name="channel"/>
+ <ref name="smartcard"/>
+ <ref name="hub"/>
+ <ref name="redirdev"/>
+ </choice>
+ </zeroOrMore>
+ <optional>
+ <ref name="watchdog"/>
+ </optional>
+ <optional>
+ <ref name="memballoon"/>
+ </optional>
+ </interleave>
+ </element>
+ </define>
+ <!--
+ A set of optional features: PAE, APIC, ACPI, and HAP support
+ -->
+ <define name="features">
+ <optional>
+ <element name="features">
+ <interleave>
+ <optional>
+ <element name="pae">
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="apic">
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="acpi">
+ <empty/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hap">
+ <empty/>
+ </element>
+ </optional>
+ </interleave>
+ </element>
+ </optional>
+ </define>
+ <!--
+ CPU specification
+ -->
+ <define name="cpu">
+ <element name="cpu">
+ <choice>
+ <ref name="cpuTopology"/>
+ <group>
+ <ref name="cpuMatch"/>
+ <interleave>
+ <ref name="cpuModel"/>
+ <optional>
+ <ref name="cpuVendor"/>
+ </optional>
+ <optional>
+ <ref name="cpuTopology"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="cpuFeature"/>
+ </zeroOrMore>
+ </interleave>
+ </group>
+ </choice>
+ </element>
+ </define>
+
+ <define name="cpuMatch">
+ <attribute name="match">
+ <choice>
+ <value>minimum</value>
+ <value>exact</value>
+ <value>strict</value>
+ </choice>
+ </attribute>
+ </define>
+
+ <define name="cpuModel">
+ <element name="model">
+ <text/>
+ </element>
+ </define>
+
+ <define name="cpuVendor">
+ <element name="vendor">
+ <text/>
+ </element>
+ </define>
+
+ <define name="cpuFeature">
+ <element name="feature">
+ <attribute name="policy">
+ <choice>
+ <value>force</value>
+ <value>require</value>
+ <value>optional</value>
+ <value>disable</value>
+ <value>forbid</value>
+ </choice>
+ </attribute>
+ <attribute name="name">
+ <ref name="featureName"/>
+ </attribute>
+ <empty/>
+ </element>
+ </define>
+
+ <define name="cpuTopology">
+ <element name="topology">
+ <attribute name="sockets">
+ <ref name="positiveInteger"/>
+ </attribute>
+ <attribute name="cores">
+ <ref name="positiveInteger"/>
+ </attribute>
+ <attribute name="threads">
+ <ref name="positiveInteger"/>
+ </attribute>
+ </element>
+ </define>
+
+ <!--
+ System information specification:
+ Placeholder for system specific informations likes the ones
+ contained in the SMBIOS area.
+ Only a limited subset of entries can be modified there, so we
+ fully enumerate each case here.
+ The DMTF spec doesn't specify any string subset, just 0 terminated
+ byte strings, but better be safe and restrict at least the names
+ to avoid problems with space normalization in attribute values,
+ the value is kept as the element body for maximum flexibility.
+ A priori we allow only type 0 and type 1 string updates
+ -->
+ <define name="sysinfo">
+ <element name="sysinfo">
+ <attribute name="type">
+ <value>smbios</value>
+ </attribute>
+ <interleave>
+ <optional>
+ <element name="bios">
+ <oneOrMore>
+ <element name="entry">
+ <attribute name="name">
+ <ref name="sysinfo-bios-name"/>
+ </attribute>
+ <ref name="sysinfo-value"/>
+ </element>
+ </oneOrMore>
+ </element>
+ </optional>
+ <optional>
+ <element name="system">
+ <oneOrMore>
+ <element name="entry">
+ <attribute name="name">
+ <ref name="sysinfo-system-name"/>
+ </attribute>
+ <ref name="sysinfo-value"/>
+ </element>
+ </oneOrMore>
+ </element>
+ </optional>
+ </interleave>
+ </element>
+ </define>
+
+ <define name="sysinfo-bios-name">
+ <choice>
+ <value>vendor</value>
+ <value>version</value>
+ <value>date</value>
+ <value>release</value>
+ </choice>
+ </define>
+
+ <define name="sysinfo-system-name">
+ <choice>
+ <value>manufacturer</value>
+ <value>product</value>
+ <value>version</value>
+ <value>serial</value>
+ <value>uuid</value>
+ <value>sku</value>
+ <value>family</value>
+ </choice>
+ </define>
+
+ <define name="sysinfo-value">
+ <data type="string">
+ <param name='pattern'>[a-zA-Z0-9/\-_\. \(\)]+</param>
+ </data>
+ </define>
+
+ <define name="smbios">
+ <element name="smbios">
+ <attribute name="mode">
+ <choice>
+ <value>emulate</value>
+ <value>host</value>
+ <value>sysinfo</value>
+ </choice>
+ </attribute>
+ <empty/>
+ </element>
+ </define>
+
+ <define name="bios">
+ <element name="bios">
+ <attribute name="useserial">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </element>
+ </define>
+
+ <define name="address">
+ <element name="address">
+ <choice>
+ <group>
+ <attribute name="type">
+ <value>pci</value>
+ </attribute>
+ <ref name="pciaddress"/>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>drive</value>
+ </attribute>
+ <ref name="driveaddress"/>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>virtio-serial</value>
+ </attribute>
+ <ref name="virtioserialaddress"/>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>ccid</value>
+ </attribute>
+ <ref name="ccidaddress"/>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>usb</value>
+ </attribute>
+ <ref name="usbportaddress"/>
+ </group>
+ </choice>
+ </element>
+ </define>
+
+ <define name="usbmaster">
+ <element name="master">
+ <attribute name="startport">
+ <ref name="usbPort"/>
+ </attribute>
+ <empty/>
+ </element>
+ </define>
+
+ <define name="filterref-node-attributes">
+ <attribute name="filter">
+ <data type="NCName"/>
+ </attribute>
+ <optional>
+ <element name="parameter">
+ <attribute name="name">
+ <ref name="filter-param-name"/>
+ </attribute>
+ <attribute name="value">
+ <ref name="filter-param-value"/>
+ </attribute>
+ </element>
+ </optional>
+ </define>
+
+ <define name="deviceBoot">
+ <element name="boot">
+ <attribute name="order">
+ <ref name="positiveInteger"/>
+ </attribute>
+ <empty/>
+ </element>
+ </define>
+
+ <!--
+ Optional hypervisor extensions in their own namespace:
+ QEmu
+ -->
+ <define name="qemucmdline">
+ <element name="commandline" ns="http://libvirt.org/schemas/domain/qemu/1.0">
+ <zeroOrMore>
+ <element name="arg">
+ <attribute name='value'/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="env">
+ <attribute name='name'>
+ <ref name="filter-param-name"/>
+ </attribute>
+ <optional>
+ <attribute name='value'/>
+ </optional>
+ <empty/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </define>
+
+ <!--
+ Type library
+
+ A domain name should be made of ascii, numbers, _-+ and is non-empty
+ memoryKB request at least 4Mbytes though Xen will grow bigger if too low
+ weight currently is in range [100, 1000]
+ -->
+ <define name="cpuset">
+ <data type="string">
+ <param name="pattern">([0-9]+(-[0-9]+)?|\^[0-9]+)(,([0-9]+(-[0-9]+)?|\^[0-9]+))*</param>
+ </data>
+ </define>
+ <define name="countCPU">
+ <data type="unsignedShort">
+ <param name="pattern">[0-9]+</param>
+ <param name="minInclusive">1</param>
+ </data>
+ </define>
+ <define name="vcpuid">
+ <data type="unsignedShort">
+ <param name="pattern">[0-9]+</param>
+ </data>
+ </define>
+ <define name="cpushares">
+ <data type="unsignedInt">
+ <param name="pattern">[0-9]+</param>
+ </data>
+ </define>
+ <define name="cpuperiod">
+ <data type="unsignedLong">
+ <param name="pattern">[0-9]+</param>
+ <param name="minInclusive">1000</param>
+ <param name="maxInclusive">1000000</param>
+ </data>
+ </define>
+ <define name="cpuquota">
+ <data type="long">
+ <param name="pattern">-?[0-9]+</param>
+ <param name="maxInclusive">18446744073709551</param>
+ <param name='minInclusive'>-1</param>
+ </data>
+ </define>
+ <define name="PortNumber">
+ <data type="short">
+ <param name="minInclusive">-1</param>
+ </data>
+ </define>
+ <define name="weight">
+ <data type="unsignedInt">
+ <param name="pattern">[0-9]+</param>
+ <param name="minInclusive">100</param>
+ <param name="maxInclusive">1000</param>
+ </data>
+ </define>
+ <define name="memoryKB">
+ <data type="unsignedInt">
+ <param name="pattern">[0-9]+</param>
+ <param name="minInclusive">4000</param>
+ </data>
+ </define>
+ <define name="domainName">
+ <data type="string">
+ <param name="pattern">[A-Za-z0-9_\.\+\-&:/]+</param>
+ </data>
+ </define>
+ <define name="diskSerial">
+ <data type="string">
+ <param name="pattern">[A-Za-z0-9_\.\+\-]+</param>
+ </data>
+ </define>
+ <define name="genericName">
+ <data type="string">
+ <param name="pattern">[a-zA-Z0-9_\+\-]+</param>
+ </data>
+ </define>
+ <define name="bridgeMode">
+ <data type="string">
+ <param name="pattern">(vepa|bridge|private|passthrough)</param>
+ </data>
+ </define>
+ <define name="addrIPorName">
+ <data type="string">
+ <param name="pattern">(([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9])|(([0-9a-fA-F]+|:)+[0-9a-fA-F]+)|([a-zA-Z0-9_\.\+\-]*)</param>
+ </data>
+ </define>
+ <define name="usbId">
+ <data type="string">
+ <param name="pattern">(0x)?[0-9a-fA-F]{1,4}</param>
+ </data>
+ </define>
+ <define name="usbAddr">
+ <data type="string">
+ <param name="pattern">(0x)?[0-9a-fA-F]{1,3}</param>
+ </data>
+ </define>
+ <define name="usbPort">
+ <data type="string">
+ <param name="pattern">((0x)?[0-9a-fA-F]{1,3}\.){0,3}(0x)?[0-9a-fA-F]{1,3}</param>
+ </data>
+ </define>
+ <define name="pciDomain">
+ <data type="string">
+ <param name="pattern">(0x)?[0-9a-fA-F]{1,4}</param>
+ </data>
+ </define>
+ <define name="pciBus">
+ <data type="string">
+ <param name="pattern">(0x)?[0-9a-fA-F]{1,2}</param>
+ </data>
+ </define>
+ <define name="pciSlot">
+ <data type="string">
+ <param name="pattern">(0x)?[0-1]?[0-9a-fA-F]</param>
+ </data>
+ </define>
+ <define name="pciFunc">
+ <data type="string">
+ <param name="pattern">(0x)?[0-7]</param>
+ </data>
+ </define>
+ <define name="driveController">
+ <data type="string">
+ <param name="pattern">[0-9]{1,2}</param>
+ </data>
+ </define>
+ <define name="driveBus">
+ <data type="string">
+ <param name="pattern">[0-9]{1,2}</param>
+ </data>
+ </define>
+ <define name="driveUnit">
+ <data type="string">
+ <param name="pattern">[0-9]{1,2}</param>
+ </data>
+ </define>
+ <define name="featureName">
+ <data type="string">
+ <param name='pattern'>[a-zA-Z0-9\-_]+</param>
+ </data>
+ </define>
+ <define name="timeDelta">
+ <data type="string">
+ <param name="pattern">(-|\+)?[0-9]+</param>
+ </data>
+ </define>
+ <define name="timeZone">
+ <data type="string">
+ <param name="pattern">[a-zA-Z0-9_\.\+\-/]+</param>
+ </data>
+ </define>
+ <define name="filter-param-name">
+ <data type="string">
+ <param name="pattern">[a-zA-Z0-9_]+</param>
+ </data>
+ </define>
+ <define name="filter-param-value">
+ <data type="string">
+ <param name="pattern">[a-zA-Z0-9_\.:]+</param>
+ </data>
+ </define>
+</grammar>
+<?xml version="1.0"?>
<!-- A Relax NG schema for the libvirt domain snapshot properties XML format -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<ref name='domainsnapshot'/>
</start>
+ <include href='domaincommon.rng'/>
+
<define name='domainsnapshot'>
<element name='domainsnapshot'>
<interleave>
</element>
</optional>
<optional>
- <element name='domain'>
- <element name='uuid'>
- <text/>
+ <choice>
+ <element name='domain'>
+ <element name='uuid'>
+ <ref name="UUID"/>
+ </element>
</element>
- </element>
+ <ref name='domain'/>
+ </choice>
</optional>
<optional>
<element name='parent'>
%dir %{_datadir}/libvirt/
%dir %{_datadir}/libvirt/schemas/
+%{_datadir}/libvirt/schemas/basictypes.rng
+%{_datadir}/libvirt/schemas/capability.rng
%{_datadir}/libvirt/schemas/domain.rng
+%{_datadir}/libvirt/schemas/domaincommon.rng
%{_datadir}/libvirt/schemas/domainsnapshot.rng
+%{_datadir}/libvirt/schemas/interface.rng
%{_datadir}/libvirt/schemas/network.rng
-%{_datadir}/libvirt/schemas/storagepool.rng
-%{_datadir}/libvirt/schemas/storagevol.rng
+%{_datadir}/libvirt/schemas/networkcommon.rng
%{_datadir}/libvirt/schemas/nodedev.rng
-%{_datadir}/libvirt/schemas/capability.rng
-%{_datadir}/libvirt/schemas/interface.rng
+%{_datadir}/libvirt/schemas/nwfilter.rng
%{_datadir}/libvirt/schemas/secret.rng
%{_datadir}/libvirt/schemas/storageencryption.rng
-%{_datadir}/libvirt/schemas/nwfilter.rng
-%{_datadir}/libvirt/schemas/basictypes.rng
-%{_datadir}/libvirt/schemas/networkcommon.rng
+%{_datadir}/libvirt/schemas/storagepool.rng
+%{_datadir}/libvirt/schemas/storagevol.rng
%{_datadir}/libvirt/cpu_map.xml
%dir %{_mingw32_datadir}/libvirt/
%dir %{_mingw32_datadir}/libvirt/schemas/
+%{_mingw32_datadir}/libvirt/schemas/basictypes.rng
+%{_mingw32_datadir}/libvirt/schemas/capability.rng
%{_mingw32_datadir}/libvirt/schemas/domain.rng
+%{_mingw32_datadir}/libvirt/schemas/domaincommon.rng
%{_mingw32_datadir}/libvirt/schemas/domainsnapshot.rng
+%{_mingw32_datadir}/libvirt/schemas/interface.rng
%{_mingw32_datadir}/libvirt/schemas/network.rng
-%{_mingw32_datadir}/libvirt/schemas/storagepool.rng
-%{_mingw32_datadir}/libvirt/schemas/storagevol.rng
+%{_mingw32_datadir}/libvirt/schemas/networkcommon.rng
%{_mingw32_datadir}/libvirt/schemas/nodedev.rng
-%{_mingw32_datadir}/libvirt/schemas/capability.rng
-%{_mingw32_datadir}/libvirt/schemas/interface.rng
%{_mingw32_datadir}/libvirt/schemas/nwfilter.rng
%{_mingw32_datadir}/libvirt/schemas/secret.rng
%{_mingw32_datadir}/libvirt/schemas/storageencryption.rng
-%{_mingw32_datadir}/libvirt/schemas/basictypes.rng
-%{_mingw32_datadir}/libvirt/schemas/networkcommon.rng
+%{_mingw32_datadir}/libvirt/schemas/storagepool.rng
+%{_mingw32_datadir}/libvirt/schemas/storagevol.rng
%{_mingw32_datadir}/libvirt/cpu_map.xml
--- /dev/null
+<domainsnapshot>
+ <name>my snap name</name>
+ <description>!@#$%^</description>
+ <parent>
+ <name>earlier_snap</name>
+ </parent>
+ <state>running</state>
+ <creationTime>1272917631</creationTime>
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory>219100</memory>
+ <currentMemory>219100</currentMemory>
+ <vcpu cpuset='1-4,8-20,525'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ <address type='drive' controller='0' bus='0' unit='0'/>
+ </disk>
+ <controller type='ide' index='0'/>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
+ <active>1</active>
+</domainsnapshot>