mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-11-05 04:41:20 +00:00
615bdfda07
The PortNumber data type is declared to derive from 'short'. Unfortunately this is an signed type, so validates the range [-32,768, 32,767] which excludes valid port numbers between 32767 and 65535. We can't use 'unsignedShort', since we need -1 to be a valid port number too. This change is to use 'int' and set an explicit max boundary instead of relying on the data types' built-in max. One of the existing tests is changed to use a high port number to validate the schema. https://bugzilla.redhat.com/show_bug.cgi?id=1214664 Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
474 lines
14 KiB
XML
474 lines
14 KiB
XML
<?xml version="1.0"?>
|
|
<!-- network-related definitions used in multiple grammars -->
|
|
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
|
|
|
<!-- Our unsignedInt doesn"t allow a leading "+" in its lexical form -->
|
|
<define name="unsignedInt">
|
|
<data type="unsignedInt">
|
|
<param name="pattern">[0-9]+</param>
|
|
</data>
|
|
</define>
|
|
<define name='unsignedLong'>
|
|
<data type='unsignedLong'>
|
|
<param name='pattern'>[0-9]+</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name='hexuint'>
|
|
<data type='string'>
|
|
<param name="pattern">(0x)?[0-9a-f]+</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="positiveInteger">
|
|
<data type="positiveInteger">
|
|
<param name="pattern">[0-9]+</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name='octalMode'>
|
|
<data type="unsignedInt">
|
|
<param name='pattern'>[0-7]+</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="uint8range">
|
|
<choice>
|
|
<data type="string">
|
|
<param name="pattern">0x[0-9a-fA-F]{1,2}</param>
|
|
</data>
|
|
<data type="int">
|
|
<param name="minInclusive">0</param>
|
|
<param name="maxInclusive">255</param>
|
|
</data>
|
|
</choice>
|
|
</define>
|
|
<define name="uint24range">
|
|
<choice>
|
|
<data type="string">
|
|
<param name="pattern">0x[0-9a-fA-F]{1,6}</param>
|
|
</data>
|
|
<data type="int">
|
|
<param name="minInclusive">0</param>
|
|
<param name="maxInclusive">16777215</param>
|
|
</data>
|
|
</choice>
|
|
</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="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>
|
|
<optional>
|
|
<attribute name="multifunction">
|
|
<ref name="virOnOff"/>
|
|
</attribute>
|
|
</optional>
|
|
</define>
|
|
|
|
<!-- a 6 byte MAC address in ASCII-hex format, eg "12:34:56:78:9A:BC" -->
|
|
<!-- The lowest bit of the 1st byte is the "multicast" bit. a -->
|
|
<!-- uniMacAddr requires that bit to be 0, and a multiMacAddr -->
|
|
<!-- requires it to be 1. Plain macAddr will accept either. -->
|
|
<!-- Currently there is no use of multiMacAddr in libvirt, it -->
|
|
<!-- is included here for documentation/comparison purposes. -->
|
|
<define name="uniMacAddr">
|
|
<data type="string">
|
|
<param name="pattern">[a-fA-F0-9][02468aAcCeE](:[a-fA-F0-9]{2}){5}</param>
|
|
</data>
|
|
</define>
|
|
<define name="multiMacAddr">
|
|
<data type="string">
|
|
<param name="pattern">[a-fA-F0-9][13579bBdDfF](:[a-fA-F0-9]{2}){5}</param>
|
|
</data>
|
|
</define>
|
|
<define name="macAddr">
|
|
<data type="string">
|
|
<param name="pattern">[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}</param>
|
|
</data>
|
|
</define>
|
|
|
|
<!--====================================================================-->
|
|
<!--The duid is a unique identifier used in DHCPv6 to identity an -->
|
|
<!--interface on a device (system). The duid is often used by servers -->
|
|
<!--such as dnsmasq to assign a specific IP address (and optionally a -->
|
|
<!--name to an interface. The applicable standards are RFC3315 and -->
|
|
<!--RFC6355. These standards actually require the duid to be fixed for -->
|
|
<!--the hardward device and applicable to all network interfaces on -->
|
|
<!--that device. It is not clear that any software currently enforces -->
|
|
<!--this requirement although it could be implemented manually. -->
|
|
<!--====================================================================-->
|
|
<!--There are currently four types of duids defined: -->
|
|
<!-- type 1, duid-LLT, link-layer (MAC) plus 32 bit time when the -->
|
|
<!-- duid-LLT was created in seconds from January 1, 2000 -->
|
|
<!-- type 2, duid-EN, 32 bit "enterprise number" followed by a -->
|
|
<!-- variable length unique identifier. -->
|
|
<!-- type 3, duid-LL, link-layer (MAC) -->
|
|
<!-- type 4, duid-UUID, a 128 bit UUID (16 bytes) -->
|
|
<!--RFC3315 states that the maximum length of a duid is 128 bytes plus -->
|
|
<!--the 16 bit type field. Often, the machine type is "1" which is the -->
|
|
<!--number assigned to ethernet. -->
|
|
|
|
<define name="duidLLT">
|
|
<data type="string">
|
|
<!-- 0======| type======| 0======| machine type======| time================| link-layer============| -->
|
|
<param name="pattern">[0]{1,2}:[0]{0,1}[1]:[0]{1,2}:[0]{0,1}[a-fA-F1-9](:[a-fA-F0-9]{1,2}){4}(:[a-fA-F0-9]{1,2}){6,8}</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="duidEN">
|
|
<data type="string">
|
|
<!-- 0======| type======| Enterprise number===| unique id ==============| -->
|
|
<param name="pattern">[0]{1,2}:[0]{0,1}[2](:[a-fA-F0-9]{1,2}){4}(:[a-fA-F0-9]{1,2}){1,124}</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="duidLL">
|
|
<data type="string">
|
|
<!-- 0======| type======| 0======| machine type======| link-layer============| -->
|
|
<param name="pattern">[0]{1,2}:[0]{0,1}[3]:[0]{1,2}:[0]{0,1}[a-fA-F1-9](:[a-fA-F0-9]{1,2}){6,8}</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="duidUUID">
|
|
<data type="string">
|
|
<!-- 0======| type======| UUID=================| -->
|
|
<param name="pattern">[0]{1,2}:[0]{0,1}[4](:[a-fA-F0-9]{1,2}){16}</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="DUID">
|
|
<choice>
|
|
<ref name="duidLLT"/>
|
|
<ref name="duidEN"/>
|
|
<ref name="duidLL"/>
|
|
<ref name="duidUUID"/>
|
|
</choice>
|
|
</define>
|
|
<!--======================================================================-->
|
|
|
|
<!-- An ipv4 "dotted quad" address -->
|
|
<define name="ipv4Addr">
|
|
<data type="string">
|
|
<param name="pattern">(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9]))</param>
|
|
</data>
|
|
</define>
|
|
|
|
<!-- Based on http://blog.mes-stats.fr/2008/10/09/regex-ipv4-et-ipv6 -->
|
|
<define name="ipv6Addr">
|
|
<data type="string">
|
|
<!-- To understand this better, take apart the toplevel "|"s -->
|
|
<param name="pattern">(([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9])))|(([0-9A-Fa-f]{1,4}:){0,5}:(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9])))|(::([0-9A-Fa-f]{1,4}:){0,5}(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9])))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:)|(::)</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="ipAddr">
|
|
<choice>
|
|
<ref name="ipv4Addr"/>
|
|
<ref name="ipv6Addr"/>
|
|
</choice>
|
|
</define>
|
|
|
|
<define name="ipv4Prefix">
|
|
<data type="unsignedInt">
|
|
<param name="maxInclusive">32</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="ipv6Prefix">
|
|
<data type="unsignedInt">
|
|
<param name="maxInclusive">128</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="ipPrefix">
|
|
<choice>
|
|
<ref name="ipv4Prefix"/>
|
|
<ref name="ipv6Prefix"/>
|
|
</choice>
|
|
</define>
|
|
|
|
<define name="genericName">
|
|
<data type="string">
|
|
<param name="pattern">[a-zA-Z0-9_\+\-]+</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="dnsName">
|
|
<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="filePath">
|
|
<data type="string">
|
|
<param name="pattern">[a-zA-Z0-9_\.\+\-\\&"'<>/%]+</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="dirPath">
|
|
<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='unit'>
|
|
<data type='string'>
|
|
<param name='pattern'>([bB]([yY][tT][eE][sS]?)?)|([kKmMgGtTpPeE]([iI]?[bB])?)</param>
|
|
</data>
|
|
</define>
|
|
<define name='scaledInteger'>
|
|
<optional>
|
|
<attribute name='unit'>
|
|
<ref name='unit'/>
|
|
</attribute>
|
|
</optional>
|
|
<ref name='unsignedLong'/>
|
|
</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='wwn'>
|
|
<data type='string'>
|
|
<param name='pattern'>(0x)?[0-9a-fA-F]{16}</param>
|
|
</data>
|
|
</define>
|
|
|
|
<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='volName'>
|
|
<!-- directory pools allow almost any file name as a volume name -->
|
|
<data type='string'>
|
|
<param name="pattern">[^/]+</param>
|
|
<except>
|
|
<choice>
|
|
<value>.</value>
|
|
<value>..</value>
|
|
</choice>
|
|
</except>
|
|
</data>
|
|
</define>
|
|
|
|
<define name='archnames'>
|
|
<choice>
|
|
<value>aarch64</value>
|
|
<value>alpha</value>
|
|
<value>armv7l</value>
|
|
<value>cris</value>
|
|
<value>i686</value>
|
|
<value>ia64</value>
|
|
<value>lm32</value>
|
|
<value>m68k</value>
|
|
<value>microblaze</value>
|
|
<value>microblazeel</value>
|
|
<value>mips</value>
|
|
<value>mipsel</value>
|
|
<value>mips64</value>
|
|
<value>mips64el</value>
|
|
<value>openrisc</value>
|
|
<value>parisc</value>
|
|
<value>parisc64</value>
|
|
<value>ppc</value>
|
|
<value>ppc64</value>
|
|
<value>ppc64le</value>
|
|
<value>ppcemb</value>
|
|
<value>s390</value>
|
|
<value>s390x</value>
|
|
<value>sh4</value>
|
|
<value>sh4eb</value>
|
|
<value>sparc</value>
|
|
<value>sparc64</value>
|
|
<value>unicore32</value>
|
|
<value>x86_64</value>
|
|
<value>xtensa</value>
|
|
<value>xtensaeb</value>
|
|
</choice>
|
|
</define>
|
|
|
|
<define name="PortNumber">
|
|
<data type="int">
|
|
<param name="minInclusive">-1</param>
|
|
<param name="maxInclusive">65535</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name='sourceinfoadapter'>
|
|
<element name='adapter'>
|
|
<choice>
|
|
<group>
|
|
<!-- To keep back-compat, 'type' is not mandatory for
|
|
scsi_host adapter -->
|
|
<optional>
|
|
<attribute name='type'>
|
|
<value>scsi_host</value>
|
|
</attribute>
|
|
</optional>
|
|
<choice>
|
|
<group>
|
|
<attribute name='name'>
|
|
<text/>
|
|
</attribute>
|
|
</group>
|
|
<group>
|
|
<interleave>
|
|
<element name="parentaddr">
|
|
<optional>
|
|
<attribute name='unique_id'>
|
|
<ref name='positiveInteger'/>
|
|
</attribute>
|
|
</optional>
|
|
<element name="address">
|
|
<ref name="pciaddress"/>
|
|
</element>
|
|
</element>
|
|
</interleave>
|
|
</group>
|
|
</choice>
|
|
</group>
|
|
<group>
|
|
<attribute name='type'>
|
|
<value>fc_host</value>
|
|
</attribute>
|
|
<optional>
|
|
<attribute name='parent'>
|
|
<text/>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name='managed'>
|
|
<ref name="virYesNo"/>
|
|
</attribute>
|
|
</optional>
|
|
<attribute name='wwnn'>
|
|
<ref name='wwn'/>
|
|
</attribute>
|
|
<attribute name='wwpn'>
|
|
<ref name='wwn'/>
|
|
</attribute>
|
|
</group>
|
|
</choice>
|
|
<empty/>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="isaaddress">
|
|
<optional>
|
|
<attribute name="iobase">
|
|
<data type="string">
|
|
<param name="pattern">0x[a-fA-F0-9]{1,4}</param>
|
|
</data>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name="irq">
|
|
<data type="string">
|
|
<param name="pattern">0x[a-fA-F0-9]</param>
|
|
</data>
|
|
</attribute>
|
|
</optional>
|
|
</define>
|
|
|
|
<define name="link-speed-state">
|
|
<optional>
|
|
<element name="link">
|
|
<optional>
|
|
<attribute name="speed">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name="state">
|
|
<choice>
|
|
<value>unknown</value>
|
|
<value>notpresent</value>
|
|
<value>down</value>
|
|
<value>lowerlayerdown</value>
|
|
<value>testing</value>
|
|
<value>dormant</value>
|
|
<value>up</value>
|
|
</choice>
|
|
</attribute>
|
|
</optional>
|
|
</element>
|
|
</optional>
|
|
</define>
|
|
|
|
<define name="virYesNo">
|
|
<choice>
|
|
<value>yes</value>
|
|
<value>no</value>
|
|
</choice>
|
|
</define>
|
|
|
|
<define name="virOnOff">
|
|
<choice>
|
|
<value>on</value>
|
|
<value>off</value>
|
|
</choice>
|
|
</define>
|
|
|
|
</grammar>
|