nodedev.rng 11.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
        <ref name="capsystem"/>
        <ref name="cappcidev"/>
        <ref name="capusbdev"/>
        <ref name="capusbinterface"/>
        <ref name="capnet"/>
        <ref name="capscsihost"/>
43
        <ref name="capscsitarget"/>
44 45
        <ref name="capscsi"/>
        <ref name="capstorage"/>
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
      </choice>
    </element>
  </define>

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

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

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

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


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

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

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

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

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

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

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

129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
    <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>
146 147 148
          <attribute name='maxCount'>
            <ref name='unsignedInt'/>
          </attribute>
149
        </optional>
150 151 152
        <zeroOrMore>
          <ref name='address'/>
        </zeroOrMore>
153 154 155
      </element>
    </optional>

156 157 158 159 160 161 162 163 164 165 166
    <optional>
      <element name='capability'>
        <attribute name='type'>
          <choice>
            <value>pci-bridge</value>
            <value>cardbus-bridge</value>
          </choice>
        </attribute>
      </element>
    </optional>

167 168 169 170 171 172 173 174 175 176 177
    <optional>
      <element name='iommuGroup'>
        <attribute name='number'>
          <ref name='unsignedInt'/>
        </attribute>
        <oneOrMore>
          <ref name='address'/>
        </oneOrMore>
      </element>
    </optional>

178 179 180 181 182 183 184 185
    <optional>
      <element name='numa'>
        <optional>
          <attribute name='node'>
            <data type='int'/>
          </attribute>
        </optional>
      </element>
186 187
    </optional>

188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
    <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>
217 218 219 220 221 222 223 224
  </define>

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

    <element name='bus'>
225
      <ref name='unsignedLong'/>
226 227
    </element>
    <element name='device'>
228
      <ref name='unsignedLong'/>
229 230 231 232
    </element>

    <element name='product'>
      <attribute name='id'>
233
        <ref name='hexuint'/>
234 235 236
      </attribute>

      <choice>
237 238
        <text/>
        <empty/>
239 240 241 242 243
      </choice>
    </element>

    <element name='vendor'>
      <attribute name='id'>
244
        <ref name='hexuint'/>
245 246 247
      </attribute>

      <choice>
248 249
        <text/>
        <empty/>
250 251 252 253 254 255 256 257 258 259
      </choice>
    </element>
  </define>

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

    <element name='number'>
260
      <ref name='unsignedLong'/>
261 262
    </element>
    <element name='class'>
263
      <ref name='unsignedLong'/>
264 265
    </element>
    <element name='subclass'>
266
      <ref name='unsignedLong'/>
267 268
    </element>
    <element name='protocol'>
269
      <ref name='unsignedLong'/>
270 271 272 273
    </element>

    <optional>
      <element name='description'>
274
        <text/>
275 276 277 278 279 280 281 282 283 284 285 286 287 288
      </element>
    </optional>
  </define>

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

    <element name='interface'>
      <text/>
    </element>
    <optional>
      <element name='address'>
289
        <ref name='mac'/>
290 291
      </element>
    </optional>
292
    <ref name="link-speed-state"/>
293

294 295 296 297 298 299 300 301
    <zeroOrMore>
      <element name='feature'>
        <attribute name='name'>
          <ref name='netfeaturename'/>
        </attribute>
      </element>
    </zeroOrMore>

302 303 304 305 306
    <zeroOrMore>
      <ref name='subcapnet'/>
    </zeroOrMore>
  </define>

307 308 309 310 311 312
  <define name='netfeaturename'>
    <data type='string'>
      <param name='pattern'>[a-zA-Z\-_]+</param>
    </data>
  </define>

313 314 315
  <define name='subcapnet'>
    <element name='capability'>
      <choice>
316 317
        <ref name='subcapnet80203'/>
        <ref name='subcapnet80211'/>
318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333
      </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 已提交
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355
  <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>
356 357 358 359 360 361
    <element name='max_vports'>
      <ref name='unsignedInt'/>
    </element>
    <element name='vports'>
      <ref name='unsignedInt'/>
    </element>
O
Osier Yang 已提交
362
  </define>
363 364 365 366 367 368 369

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

    <element name='host'>
370
      <ref name='unsignedLong'/>
371
    </element>
O
Osier Yang 已提交
372

J
John Ferlan 已提交
373 374 375 376 377 378
    <optional>
      <element name='unique_id'>
        <ref name='positiveInteger'/>
      </element>
    </optional>

O
Osier Yang 已提交
379 380 381 382 383 384 385 386 387 388
    <optional>
      <zeroOrMore>
        <element name='capability'>
          <choice>
            <ref name='capsfchost'/>
            <ref name='capsvports'/>
          </choice>
        </element>
      </zeroOrMore>
    </optional>
389 390
  </define>

391 392 393 394 395 396 397 398 399 400
  <define name='capscsitarget'>
    <attribute name='type'>
      <value>scsi_target</value>
    </attribute>

    <element name='target'>
      <text/>
    </element>
  </define>

401 402 403 404 405 406
  <define name='capscsi'>
    <attribute name='type'>
      <value>scsi</value>
    </attribute>

    <element name='host'>
407
      <ref name='unsignedLong'/>
408 409
    </element>
    <element name='bus'>
410
      <ref name='unsignedLong'/>
411 412
    </element>
    <element name='target'>
413
      <ref name='unsignedLong'/>
414 415
    </element>
    <element name='lun'>
416
      <ref name='unsignedLong'/>
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434
    </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'>
435
        <text/>
436 437 438 439
      </element>
    </optional>
    <optional>
      <element name='drive_type'>
440
        <text/>
441 442 443 444
      </element>
    </optional>
    <optional>
      <element name='model'>
445 446
        <text/>
        </element>
447 448 449
    </optional>
    <optional>
      <element name='vendor'>
450
        <text/>
451 452
      </element>
    </optional>
453 454
    <optional>
      <element name='serial'>
455
        <text/>
456 457
      </element>
    </optional>
458 459 460 461 462 463 464 465

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

    <optional>
      <element name='capability'>
466 467 468
        <attribute name='type'>
          <value>hotpluggable</value>
        </attribute>
469 470 471 472 473 474 475
      </element>
    </optional>
  </define>

  <define name='capstorageremoveable'>
    <element name='capability'>
      <attribute name='type'>
476
        <value>removable</value>
477 478
      </attribute>
      <element name='media_available'>
479 480 481 482
        <choice>
          <value>1</value>
          <value>0</value>
        </choice>
483 484 485
      </element>

      <element name='media_size'>
486
        <ref name='unsignedLong'/>
487
      </element>
488 489 490 491 492
      <optional>
        <element name='media_label'>
          <text/>
        </element>
      </optional>
493 494 495 496 497
    </element>
  </define>

  <define name='capstoragefixed'>
    <element name='size'>
498
      <ref name='unsignedLong'/>
499 500 501
    </element>
  </define>

502 503 504 505 506 507 508 509 510
  <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>

511 512 513 514 515 516 517 518 519 520 521 522 523
  <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>