mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-11-06 13:20:20 +00:00
23d6abd23b
When attaching a USB host device based on vendor/product, libvirt will resolve the vendor/product into a device/bus pair. This means that when printing XML we should allow device/bus info to be printed at any time if present * src/conf/domain_conf.c, docs/schemas/domain.rng: Allow USB device bus info alongside vendor/product
1530 lines
38 KiB
XML
1530 lines
38 KiB
XML
<?xml version="1.0"?>
|
|
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
|
<!-- We handle only document defining a domain -->
|
|
<start>
|
|
<ref name="domain"/>
|
|
</start>
|
|
|
|
<include href='storageencryption.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>
|
|
<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>
|
|
</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>
|
|
<element name="label">
|
|
<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"/>
|
|
<ref name="osbootdev"/>
|
|
</choice>
|
|
</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>
|
|
<optional>
|
|
<element name="vcpu">
|
|
<optional>
|
|
<attribute name="cpuset"/>
|
|
</optional>
|
|
<ref name="countCPU"/>
|
|
</element>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="clock">
|
|
<optional>
|
|
<element name="clock">
|
|
<attribute name="offset">
|
|
<choice>
|
|
<value>localtime</value>
|
|
<value>utc</value>
|
|
</choice>
|
|
</attribute>
|
|
<empty/>
|
|
</element>
|
|
</optional>
|
|
</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>
|
|
<element name="kernel">
|
|
<ref name="absFilePath"/>
|
|
</element>
|
|
<optional>
|
|
<element name="initrd">
|
|
<ref name="absFilePath"/>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<element name="root">
|
|
<ref name="devicePath"/>
|
|
</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>
|
|
<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>
|
|
<!--
|
|
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="deviceName"/>
|
|
</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>
|
|
<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>
|
|
<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>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
<define name="controller">
|
|
<element name="controller">
|
|
<optional>
|
|
<attribute name="type">
|
|
<choice>
|
|
<value>fdc</value>
|
|
<value>ide</value>
|
|
<value>scsi</value>
|
|
<value>sata</value>
|
|
</choice>
|
|
</attribute>
|
|
</optional>
|
|
<attribute name="index">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<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="deviceName"/>
|
|
</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"/>
|
|
</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>
|
|
<empty/>
|
|
</element>
|
|
<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
|
|
-->
|
|
<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="addrMAC"/>
|
|
</attribute>
|
|
<empty/>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<element name="ip">
|
|
<attribute name="address">
|
|
<ref name="addrIP"/>
|
|
</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>
|
|
<ref name="address"/>
|
|
</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>
|
|
<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="addrIP"/>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name="passwd">
|
|
<text/>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name="keymap">
|
|
<text/>
|
|
</attribute>
|
|
</optional>
|
|
</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="addrIP"/>
|
|
</attribute>
|
|
</optional>
|
|
</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>
|
|
<!--
|
|
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="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>
|
|
</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="offOptions"/>
|
|
</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>
|
|
<!--
|
|
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="devicePath"/>
|
|
</attribute>
|
|
</optional>
|
|
<interleave>
|
|
<ref name="qemucdevSrcDef"/>
|
|
<optional>
|
|
<element name="target">
|
|
<optional>
|
|
<attribute name="port"/>
|
|
</optional>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<ref name="address"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="qemucdevSrcType">
|
|
<attribute name="type">
|
|
<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>
|
|
</choice>
|
|
</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"/>
|
|
</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="devicePath"/>
|
|
</attribute>
|
|
</optional>
|
|
<empty/>
|
|
</group>
|
|
<ref name="qemucdev"/>
|
|
</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>
|
|
</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>
|
|
</choice>
|
|
</attribute>
|
|
</optional>
|
|
<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="channel">
|
|
<element name="channel">
|
|
<ref name="qemucdevSrcType"/>
|
|
<interleave>
|
|
<ref name="qemucdevSrcDef"/>
|
|
<ref name="guestfwdTarget"/>
|
|
<optional>
|
|
<ref name="address"/>
|
|
</optional>
|
|
</interleave>
|
|
</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="hostdev">
|
|
<element name="hostdev">
|
|
<optional>
|
|
<attribute name="mode">
|
|
<choice>
|
|
<value>subsystem</value>
|
|
<value>capabilities</value>
|
|
</choice>
|
|
</attribute>
|
|
<attribute name="type">
|
|
<choice>
|
|
<value>usb</value>
|
|
<value>pci</value>
|
|
</choice>
|
|
</attribute>
|
|
<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="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="usbAddr"/>
|
|
</attribute>
|
|
</element>
|
|
</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>
|
|
<!--
|
|
Devices attached to a domain.
|
|
-->
|
|
<define name="devices">
|
|
<element name="devices">
|
|
<interleave>
|
|
<optional>
|
|
<ref name="emulator"/>
|
|
</optional>
|
|
<zeroOrMore>
|
|
<choice>
|
|
<ref name="disk"/>
|
|
<ref name="controller"/>
|
|
<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"/>
|
|
</choice>
|
|
</zeroOrMore>
|
|
<optional>
|
|
<ref name="watchdog"/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<!--
|
|
A set of optional features: PAE, APIC and ACPI 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>
|
|
</interleave>
|
|
</element>
|
|
</optional>
|
|
</define>
|
|
<!--
|
|
CPU specification
|
|
-->
|
|
<define name="cpu">
|
|
<element name="cpu">
|
|
<optional>
|
|
<attribute name="match">
|
|
<choice>
|
|
<value>minimum</value>
|
|
<value>exact</value>
|
|
<value>strict</value>
|
|
</choice>
|
|
</attribute>
|
|
</optional>
|
|
<interleave>
|
|
<optional>
|
|
<element name="model">
|
|
<text/>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<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>
|
|
</optional>
|
|
<zeroOrMore>
|
|
<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>
|
|
</zeroOrMore>
|
|
</interleave>
|
|
</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>
|
|
</choice>
|
|
</element>
|
|
</define>
|
|
|
|
<!--
|
|
Type library
|
|
|
|
Our unsignedInt doesn't allow a leading '+' in its lexical form
|
|
A domain name shoul be made of ascii, numbers, _-+ and is non-empty
|
|
UUID currently allows only the 32 characters strict syntax
|
|
memoryKB request at least 4Mbytes though Xen will grow bigger if too low
|
|
-->
|
|
<define name="unsignedInt">
|
|
<data type="unsignedInt">
|
|
<param name="pattern">[0-9]+</param>
|
|
</data>
|
|
</define>
|
|
<define name='positiveInteger'>
|
|
<data type='positiveInteger'>
|
|
<param name="pattern">[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="PortNumber">
|
|
<data type="short">
|
|
<param name="minInclusive">-1</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="UUID">
|
|
<choice>
|
|
<data type="string">
|
|
<param name="pattern">[a-fA-F0-9]{32}</param>
|
|
</data>
|
|
<data type="string">
|
|
<param name="pattern">[a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12}</param>
|
|
</data>
|
|
</choice>
|
|
</define>
|
|
<define name="filePath">
|
|
<data type="string">
|
|
<param name="pattern">[a-zA-Z0-9_\.\+\-&/%]+</param>
|
|
</data>
|
|
</define>
|
|
<define name="absFilePath">
|
|
<data type="string">
|
|
<param name="pattern">/[a-zA-Z0-9_\.\+\-&/%]+</param>
|
|
</data>
|
|
</define>
|
|
<define name="absDirPath">
|
|
<data type="string">
|
|
<param name="pattern">/[a-zA-Z0-9_\.\+\-&/%]*</param>
|
|
</data>
|
|
</define>
|
|
<define name="devicePath">
|
|
<data type="string">
|
|
<param name="pattern">/[a-zA-Z0-9_\+\-/%]+</param>
|
|
</data>
|
|
</define>
|
|
<define name="deviceName">
|
|
<data type="string">
|
|
<param name="pattern">[a-zA-Z0-9_\.\-:/]+</param>
|
|
</data>
|
|
</define>
|
|
<define name="addrMAC">
|
|
<data type="string">
|
|
<param name="pattern">([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}</param>
|
|
</data>
|
|
</define>
|
|
<define name="addrIP">
|
|
<data type="string">
|
|
<param name="pattern">([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-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="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>
|
|
</grammar>
|