libvirt/docs/schemas/nodedev.rng
Jonathon Jongsma 53aec799fa Include vdpa devices in node device list
The current udev node device driver ignores all events related to vdpa
devices. Since libvirt now supports vDPA network devices, include these
devices in the device list.

Example output:

virsh # nodedev-list
[...ommitted long list of nodedevs...]
vdpa_vdpa0

virsh # nodedev-dumpxml vdpa_vdpa0
<device>
  <name>vdpa_vdpa0</name>
  <path>/sys/devices/vdpa0</path>
  <parent>computer</parent>
  <driver>
    <name>vhost_vdpa</name>
  </driver>
  <capability type='vdpa'>
    <chardev>/dev/vhost-vdpa-0</chardev>
  </capability>
</device>

NOTE: normally the 'parent' would be a PCI device instead of 'computer',
but this example output is from the vdpa_sim kernel module, so it
doesn't have a normal parent device.

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
2020-10-26 02:39:29 -04:00

710 lines
15 KiB
XML

<?xml version="1.0"?>
<!-- A Relax NG schema for the libvirt node device XML format -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="basictypes.rng"/>
<start>
<ref name="device"/>
</start>
<define name="device">
<element name="device">
<!-- The name of the network, used to refer to it through the API
and in virsh -->
<element name="name"><text/></element>
<optional>
<element name="path"><text/></element>
</optional>
<optional>
<element name="devnode">
<attribute name="type">
<value>dev</value>
</attribute>
<text/>
</element>
</optional>
<zeroOrMore>
<element name="devnode">
<attribute name="type">
<value>link</value>
</attribute>
<text/>
</element>
</zeroOrMore>
<optional>
<ref name="parent"/>
</optional>
<optional>
<element name="driver">
<element name="name"><text/></element>
</element>
</optional>
<zeroOrMore>
<ref name="capability"/>
</zeroOrMore>
</element>
</define>
<define name="parent">
<element name="parent">
<choice>
<group>
<attribute name="wwnn">
<ref name="wwn"/>
</attribute>
<attribute name="wwpn">
<ref name="wwn"/>
</attribute>
<empty/>
</group>
<group>
<attribute name="fabric_wwn">
<ref name="wwn"/>
</attribute>
<empty/>
</group>
<text/>
</choice>
</element>
</define>
<define name="capability">
<element name="capability">
<choice>
<ref name="capsystem"/>
<ref name="cappcidev"/>
<ref name="capusbdev"/>
<ref name="capusbinterface"/>
<ref name="capnet"/>
<ref name="capscsihost"/>
<ref name="capscsitarget"/>
<ref name="capscsi"/>
<ref name="capstorage"/>
<ref name="capdrm"/>
<ref name="capmdev"/>
<ref name="capccwdev"/>
<ref name="capcssdev"/>
<ref name="capvdpa"/>
</choice>
</element>
</define>
<define name="capsystem">
<attribute name="type">
<value>system</value>
</attribute>
<optional>
<element name="product"><text/></element>
</optional>
<element name="hardware">
<optional>
<element name="vendor"><text/></element>
</optional>
<optional>
<element name="version"><text/></element>
</optional>
<optional>
<element name="serial"><text/></element>
</optional>
<element name="uuid">
<ref name="UUID"/>
</element>
</element>
<element name="firmware">
<optional>
<element name="vendor"><text/></element>
</optional>
<optional>
<element name="version"><text/></element>
</optional>
<optional>
<element name="release_date"><text/></element>
</optional>
</element>
</define>
<define name="cappcidev">
<attribute name="type">
<value>pci</value>
</attribute>
<optional>
<element name="class">
<data type="string">
<param name="pattern">0x[0-9a-fA-F]{6}</param>
</data>
</element>
</optional>
<element name="domain">
<ref name="unsignedLong"/>
</element>
<element name="bus">
<ref name="unsignedLong"/>
</element>
<element name="slot">
<ref name="unsignedLong"/>
</element>
<element name="function">
<ref name="unsignedLong"/>
</element>
<element name="product">
<attribute name="id">
<ref name="hexuint"/>
</attribute>
<choice>
<text/>
<empty/>
</choice>
</element>
<element name="vendor">
<attribute name="id">
<ref name="hexuint"/>
</attribute>
<choice>
<text/>
<empty/>
</choice>
</element>
<optional>
<element name="capability">
<attribute name="type">
<value>phys_function</value>
</attribute>
<optional>
<ref name="address"/>
</optional>
</element>
</optional>
<optional>
<element name="capability">
<attribute name="type">
<value>virt_functions</value>
</attribute>
<optional>
<attribute name="maxCount">
<ref name="unsignedInt"/>
</attribute>
</optional>
<zeroOrMore>
<ref name="address"/>
</zeroOrMore>
</element>
</optional>
<optional>
<element name="capability">
<attribute name="type">
<choice>
<value>pci-bridge</value>
<value>cardbus-bridge</value>
</choice>
</attribute>
</element>
</optional>
<optional>
<element name="capability">
<attribute name="type">
<value>mdev_types</value>
</attribute>
<oneOrMore>
<element name="type">
<attribute name="id">
<data type="string"/>
</attribute>
<optional>
<element name="name"><text/></element>
</optional>
<element name="deviceAPI">
<value>vfio-pci</value>
</element>
<element name="availableInstances">
<ref name="unsignedInt"/>
</element>
</element>
</oneOrMore>
</element>
</optional>
<optional>
<element name="iommuGroup">
<attribute name="number">
<ref name="unsignedInt"/>
</attribute>
<oneOrMore>
<ref name="address"/>
</oneOrMore>
</element>
</optional>
<optional>
<element name="numa">
<optional>
<attribute name="node">
<data type="int"/>
</attribute>
</optional>
</element>
</optional>
<optional>
<element name="pci-express">
<zeroOrMore>
<element name="link">
<attribute name="validity">
<choice>
<value>cap</value>
<value>sta</value>
</choice>
</attribute>
<optional>
<attribute name="port">
<ref name="unsignedInt"/>
</attribute>
</optional>
<optional>
<attribute name="speed">
<data type="string">
<param name="pattern">[0-9]+(.[0-9]+)?</param>
</data>
</attribute>
</optional>
<attribute name="width">
<ref name="unsignedInt"/>
</attribute>
</element>
</zeroOrMore>
</element>
</optional>
</define>
<define name="capusbdev">
<attribute name="type">
<value>usb_device</value>
</attribute>
<element name="bus">
<ref name="unsignedLong"/>
</element>
<element name="device">
<ref name="unsignedLong"/>
</element>
<element name="product">
<attribute name="id">
<ref name="hexuint"/>
</attribute>
<choice>
<text/>
<empty/>
</choice>
</element>
<element name="vendor">
<attribute name="id">
<ref name="hexuint"/>
</attribute>
<choice>
<text/>
<empty/>
</choice>
</element>
</define>
<define name="capusbinterface">
<attribute name="type">
<value>usb</value>
</attribute>
<element name="number">
<ref name="unsignedLong"/>
</element>
<element name="class">
<ref name="unsignedLong"/>
</element>
<element name="subclass">
<ref name="unsignedLong"/>
</element>
<element name="protocol">
<ref name="unsignedLong"/>
</element>
<optional>
<element name="description">
<text/>
</element>
</optional>
</define>
<define name="capnet">
<attribute name="type">
<value>net</value>
</attribute>
<element name="interface">
<text/>
</element>
<optional>
<element name="address">
<ref name="mac"/>
</element>
</optional>
<ref name="link-speed-state"/>
<zeroOrMore>
<element name="feature">
<attribute name="name">
<ref name="netfeaturename"/>
</attribute>
</element>
</zeroOrMore>
<zeroOrMore>
<ref name="subcapnet"/>
</zeroOrMore>
</define>
<define name="netfeaturename">
<data type="string">
<param name="pattern">[a-zA-Z\-_]+</param>
</data>
</define>
<define name="subcapnet">
<element name="capability">
<choice>
<ref name="subcapnet80203"/>
<ref name="subcapnet80211"/>
</choice>
</element>
</define>
<define name="subcapnet80203">
<attribute name="type">
<value>80203</value>
</attribute>
</define>
<define name="subcapnet80211">
<attribute name="type">
<value>80211</value>
</attribute>
</define>
<define name="capsfchost">
<attribute name="type">
<value>fc_host</value>
</attribute>
<element name="wwnn">
<ref name="wwn"/>
</element>
<element name="wwpn">
<ref name="wwn"/>
</element>
<optional>
<element name="fabric_wwn">
<ref name="wwn"/>
</element>
</optional>
</define>
<define name="capsvports">
<attribute name="type">
<value>vports_ops</value>
</attribute>
<element name="max_vports">
<ref name="unsignedInt"/>
</element>
<element name="vports">
<ref name="unsignedInt"/>
</element>
</define>
<define name="capscsihost">
<attribute name="type">
<value>scsi_host</value>
</attribute>
<element name="host">
<ref name="unsignedLong"/>
</element>
<optional>
<element name="unique_id">
<ref name="positiveInteger"/>
</element>
</optional>
<optional>
<zeroOrMore>
<element name="capability">
<choice>
<ref name="capsfchost"/>
<ref name="capsvports"/>
</choice>
</element>
</zeroOrMore>
</optional>
</define>
<define name="capsfcrport">
<attribute name="type">
<value>fc_remote_port</value>
</attribute>
<element name="rport">
<text/>
</element>
<element name="wwpn">
<ref name="wwn"/>
</element>
</define>
<define name="capscsitarget">
<attribute name="type">
<value>scsi_target</value>
</attribute>
<element name="target">
<text/>
</element>
<optional>
<element name="capability">
<ref name="capsfcrport"/>
</element>
</optional>
</define>
<define name="capscsi">
<attribute name="type">
<value>scsi</value>
</attribute>
<element name="host">
<ref name="unsignedLong"/>
</element>
<element name="bus">
<ref name="unsignedLong"/>
</element>
<element name="target">
<ref name="unsignedLong"/>
</element>
<element name="lun">
<ref name="unsignedLong"/>
</element>
<element name="type">
<text/>
</element>
</define>
<define name="capstorage">
<attribute name="type">
<value>storage</value>
</attribute>
<element name="block">
<ref name="path"/>
</element>
<optional>
<element name="bus">
<text/>
</element>
</optional>
<optional>
<element name="drive_type">
<text/>
</element>
</optional>
<optional>
<element name="model">
<text/>
</element>
</optional>
<optional>
<element name="vendor">
<text/>
</element>
</optional>
<optional>
<element name="serial">
<text/>
</element>
</optional>
<choice>
<ref name="capstorageremoveable"/>
<ref name="capstoragefixed"/>
</choice>
<optional>
<element name="capability">
<attribute name="type">
<value>hotpluggable</value>
</attribute>
</element>
</optional>
</define>
<define name="capstorageremoveable">
<element name="capability">
<attribute name="type">
<value>removable</value>
</attribute>
<element name="media_available">
<choice>
<value>1</value>
<value>0</value>
</choice>
</element>
<element name="media_size">
<ref name="unsignedLong"/>
</element>
<optional>
<element name="media_label">
<text/>
</element>
</optional>
<ref name="blockData"/>
</element>
</define>
<define name="capstoragefixed">
<element name="size">
<ref name="unsignedLong"/>
</element>
<ref name="blockData"/>
</define>
<define name="blockData">
<optional>
<element name="logical_block_size">
<ref name="unsignedLong"/>
</element>
<element name="num_blocks">
<ref name="unsignedLong"/>
</element>
</optional>
</define>
<define name="capdrm">
<attribute name="type">
<value>drm</value>
</attribute>
<element name="type">
<choice>
<value>primary</value>
<value>control</value>
<value>render</value>
</choice>
</element>
</define>
<define name="capmdev">
<attribute name="type">
<value>mdev</value>
</attribute>
<element name="type">
<attribute name="id">
<data type="string"/>
</attribute>
</element>
<optional>
<element name="iommuGroup">
<attribute name="number">
<ref name="unsignedInt"/>
</attribute>
</element>
</optional>
<zeroOrMore>
<element name="attr">
<attribute name="name"/>
<attribute name="value"/>
</element>
</zeroOrMore>
</define>
<define name="capccwdev">
<attribute name="type">
<value>ccw</value>
</attribute>
<element name="cssid">
<ref name="ccwCssidRange"/>
</element>
<element name="ssid">
<ref name="ccwSsidRange"/>
</element>
<element name="devno">
<ref name="ccwDevnoRange"/>
</element>
</define>
<define name="capcssdev">
<attribute name="type">
<value>css</value>
</attribute>
<element name="cssid">
<ref name="ccwCssidRange"/>
</element>
<element name="ssid">
<ref name="ccwSsidRange"/>
</element>
<element name="devno">
<ref name="ccwDevnoRange"/>
</element>
</define>
<define name="capvdpa">
<attribute name="type">
<value>vdpa</value>
</attribute>
<element name="chardev">
<ref name="path"/>
</element>
</define>
<define name="address">
<element name="address">
<attribute name="domain"><ref name="hexuint"/></attribute>
<attribute name="bus"><ref name="hexuint"/></attribute>
<attribute name="slot"><ref name="hexuint"/></attribute>
<attribute name="function"><ref name="hexuint"/></attribute>
</element>
</define>
<define name="mac">
<data type="string">
<param name="pattern">([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}</param>
</data>
</define>
<define name="path">
<data type="string">
<param name="pattern">/[a-zA-Z0-9_\+\-/%]+</param>
</data>
</define>
</grammar>