nodedev.rng 9.2 KB
Newer Older
1
<?xml version="1.0"?>
2 3 4
<!-- 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">
5
  <include href='basictypes.rng'/>
6 7 8 9 10 11 12 13 14
  <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>
15 16 17
      <optional>
        <element name="path"><text/></element>
      </optional>
18 19 20 21
      <optional>
        <element name="parent"><text/></element>
      </optional>

22 23 24 25 26 27
      <optional>
        <element name="driver">
          <element name="name"><text/></element>
        </element>
      </optional>

28
      <zeroOrMore>
29
        <ref name="capability"/>
30 31 32 33 34 35 36
      </zeroOrMore>
    </element>
  </define>

  <define name='capability'>
    <element name="capability">
      <choice>
37 38 39 40 41 42 43 44
        <ref name="capsystem"/>
        <ref name="cappcidev"/>
        <ref name="capusbdev"/>
        <ref name="capusbinterface"/>
        <ref name="capnet"/>
        <ref name="capscsihost"/>
        <ref name="capscsi"/>
        <ref name="capstorage"/>
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
      </choice>
    </element>
  </define>

  <define name='capsystem'>
    <attribute name='type'>
      <value>system</value>
    </attribute>

    <optional>
      <element name='product'><text/></element>
    </optional>

    <element name='hardware'>
      <optional>
60
        <element name='vendor'><text/></element>
61 62
      </optional>
      <optional>
63
        <element name='version'><text/></element>
64 65
      </optional>
      <optional>
66
        <element name='serial'><text/></element>
67 68 69
      </optional>

      <element name='uuid'>
70
        <ref name='UUID'/>
71 72 73 74 75 76
      </element>
    </element>


    <element name='firmware'>
      <optional>
77
        <element name='vendor'><text/></element>
78 79
      </optional>
      <optional>
80
        <element name='version'><text/></element>
81 82
      </optional>
      <optional>
83
        <element name='release_date'><text/></element>
84 85 86 87 88 89 90 91 92 93
      </optional>
    </element>
  </define>

  <define name='cappcidev'>
    <attribute name='type'>
      <value>pci</value>
    </attribute>

    <element name='domain'>
94
      <ref name='unsignedLong'/>
95 96
    </element>
    <element name='bus'>
97
      <ref name='unsignedLong'/>
98 99
    </element>
    <element name='slot'>
100
      <ref name='unsignedLong'/>
101 102
    </element>
    <element name='function'>
103
      <ref name='unsignedLong'/>
104 105 106 107
    </element>

    <element name='product'>
      <attribute name='id'>
108
        <ref name='hexuint'/>
109 110 111
      </attribute>

      <choice>
112 113
        <text/>
        <empty/>
114 115 116 117 118
      </choice>
    </element>

    <element name='vendor'>
      <attribute name='id'>
119
        <ref name='hexuint'/>
120 121 122
      </attribute>

      <choice>
123 124
        <text/>
        <empty/>
125 126 127
      </choice>
    </element>

128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
    <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>
          <ref name='address'/>
        </optional>
      </element>
    </optional>

150 151 152 153 154 155 156 157 158 159 160
    <optional>
      <element name='iommuGroup'>
        <attribute name='number'>
          <ref name='unsignedInt'/>
        </attribute>
        <oneOrMore>
          <ref name='address'/>
        </oneOrMore>
      </element>
    </optional>

161 162 163 164 165 166 167 168
  </define>

  <define name='capusbdev'>
    <attribute name='type'>
      <value>usb_device</value>
    </attribute>

    <element name='bus'>
169
      <ref name='unsignedLong'/>
170 171
    </element>
    <element name='device'>
172
      <ref name='unsignedLong'/>
173 174 175 176
    </element>

    <element name='product'>
      <attribute name='id'>
177
        <ref name='hexuint'/>
178 179 180
      </attribute>

      <choice>
181 182
        <text/>
        <empty/>
183 184 185 186 187
      </choice>
    </element>

    <element name='vendor'>
      <attribute name='id'>
188
        <ref name='hexuint'/>
189 190 191
      </attribute>

      <choice>
192 193
        <text/>
        <empty/>
194 195 196 197 198 199 200 201 202 203
      </choice>
    </element>
  </define>

  <define name='capusbinterface'>
    <attribute name='type'>
      <value>usb</value>
    </attribute>

    <element name='number'>
204
      <ref name='unsignedLong'/>
205 206
    </element>
    <element name='class'>
207
      <ref name='unsignedLong'/>
208 209
    </element>
    <element name='subclass'>
210
      <ref name='unsignedLong'/>
211 212
    </element>
    <element name='protocol'>
213
      <ref name='unsignedLong'/>
214 215 216 217
    </element>

    <optional>
      <element name='description'>
218
        <text/>
219 220 221 222 223 224 225 226 227 228 229 230 231 232
      </element>
    </optional>
  </define>

  <define name='capnet'>
    <attribute name='type'>
      <value>net</value>
    </attribute>

    <element name='interface'>
      <text/>
    </element>
    <optional>
      <element name='address'>
233
        <ref name='mac'/>
234 235 236 237 238 239 240 241 242 243 244
      </element>
    </optional>

    <zeroOrMore>
      <ref name='subcapnet'/>
    </zeroOrMore>
  </define>

  <define name='subcapnet'>
    <element name='capability'>
      <choice>
245 246
        <ref name='subcapnet80203'/>
        <ref name='subcapnet80211'/>
247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262
      </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>

O
Osier Yang 已提交
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284
  <define name='capsfchost'>
    <attribute name='type'>
      <value>fc_host</value>
    </attribute>

    <element name='wwnn'>
      <ref name='wwn'/>
    </element>

    <element name='wwpn'>
      <ref name='wwn'/>
    </element>

    <element name='fabric_wwn'>
      <ref name='wwn'/>
    </element>
  </define>

  <define name='capsvports'>
    <attribute name='type'>
      <value>vports_ops</value>
    </attribute>
285 286 287 288 289 290
    <element name='max_vports'>
      <ref name='unsignedInt'/>
    </element>
    <element name='vports'>
      <ref name='unsignedInt'/>
    </element>
O
Osier Yang 已提交
291
  </define>
292 293 294 295 296 297 298

  <define name='capscsihost'>
    <attribute name='type'>
      <value>scsi_host</value>
    </attribute>

    <element name='host'>
299
      <ref name='unsignedLong'/>
300
    </element>
O
Osier Yang 已提交
301 302 303 304 305 306 307 308 309 310 311

    <optional>
      <zeroOrMore>
        <element name='capability'>
          <choice>
            <ref name='capsfchost'/>
            <ref name='capsvports'/>
          </choice>
        </element>
      </zeroOrMore>
    </optional>
312 313 314 315 316 317 318 319
  </define>

  <define name='capscsi'>
    <attribute name='type'>
      <value>scsi</value>
    </attribute>

    <element name='host'>
320
      <ref name='unsignedLong'/>
321 322
    </element>
    <element name='bus'>
323
      <ref name='unsignedLong'/>
324 325
    </element>
    <element name='target'>
326
      <ref name='unsignedLong'/>
327 328
    </element>
    <element name='lun'>
329
      <ref name='unsignedLong'/>
330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347
    </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'>
348
        <text/>
349 350 351 352
      </element>
    </optional>
    <optional>
      <element name='drive_type'>
353
        <text/>
354 355 356 357
      </element>
    </optional>
    <optional>
      <element name='model'>
358 359
        <text/>
        </element>
360 361 362
    </optional>
    <optional>
      <element name='vendor'>
363
        <text/>
364 365
      </element>
    </optional>
366 367
    <optional>
      <element name='serial'>
368
        <text/>
369 370
      </element>
    </optional>
371 372 373 374 375 376 377 378

    <choice>
      <ref name='capstorageremoveable'/>
      <ref name='capstoragefixed'/>
    </choice>

    <optional>
      <element name='capability'>
379 380 381
        <attribute name='type'>
          <value>hotpluggable</value>
        </attribute>
382 383 384 385 386 387 388
      </element>
    </optional>
  </define>

  <define name='capstorageremoveable'>
    <element name='capability'>
      <attribute name='type'>
389
        <value>removable</value>
390 391
      </attribute>
      <element name='media_available'>
392 393 394 395
        <choice>
          <value>1</value>
          <value>0</value>
        </choice>
396 397 398
      </element>

      <element name='media_size'>
399
        <ref name='unsignedLong'/>
400
      </element>
401 402 403 404 405
      <optional>
        <element name='media_label'>
          <text/>
        </element>
      </optional>
406 407 408 409 410
    </element>
  </define>

  <define name='capstoragefixed'>
    <element name='size'>
411
      <ref name='unsignedLong'/>
412 413 414
    </element>
  </define>

415 416 417 418 419 420 421 422 423
  <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>

424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
  <define name='hexuint'>
    <data type='string'>
      <param name="pattern">(0x)?[0-9a-f]+</param>
    </data>
  </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>