Return to libvirt.rng CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / test / relaxng |
1.1 ! misho 1: <?xml version="1.0"?> ! 2: <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> ! 3: <!-- We handle only document defining a domain --> ! 4: <start> ! 5: <ref name="domain"/> ! 6: </start> ! 7: ! 8: <!-- ! 9: We handle only document defining a domain ! 10: --> ! 11: <define name="domain"> ! 12: <element name="domain"> ! 13: <ref name="hvs"/> ! 14: <ref name="ids"/> ! 15: <interleave> ! 16: <ref name="os"/> ! 17: <ref name="clock"/> ! 18: <ref name="resources"/> ! 19: <ref name="features"/> ! 20: <ref name="termination"/> ! 21: <optional> ! 22: <ref name="devices"/> ! 23: </optional> ! 24: <optional> ! 25: <ref name="seclabel"/> ! 26: </optional> ! 27: </interleave> ! 28: </element> ! 29: </define> ! 30: <define name="seclabel"> ! 31: <element name="seclabel"> ! 32: <attribute name="model"> ! 33: <text/> ! 34: </attribute> ! 35: <attribute name="type"> ! 36: <choice> ! 37: <value>dynamic</value> ! 38: <value>static</value> ! 39: </choice> ! 40: </attribute> ! 41: <element name="label"> ! 42: <text/> ! 43: </element> ! 44: </element> ! 45: </define> ! 46: <define name="hvs"> ! 47: <attribute name="type"> ! 48: <choice> ! 49: <value>xen</value> ! 50: <value>kvm</value> ! 51: <value>kqemu</value> ! 52: <value>qemu</value> ! 53: <value>lxc</value> ! 54: <value>openvz</value> ! 55: <value>test</value> ! 56: </choice> ! 57: </attribute> ! 58: </define> ! 59: <define name="os"> ! 60: <choice> ! 61: <ref name="osxen"/> ! 62: <ref name="oshvm"/> ! 63: <ref name="osexe"/> ! 64: </choice> ! 65: </define> ! 66: <define name="osxen"> ! 67: <choice> ! 68: <group> ! 69: <optional> ! 70: <ref name="bootloader"/> ! 71: </optional> ! 72: <element name="os"> ! 73: <ref name="ostypexen"/> ! 74: <ref name="osbootkernel"/> ! 75: </element> ! 76: </group> ! 77: <group> ! 78: <ref name="bootloader"/> ! 79: <optional> ! 80: <element name="os"> ! 81: <ref name="ostypexen"/> ! 82: <optional> ! 83: <ref name="osbootkernel"/> ! 84: </optional> ! 85: </element> ! 86: </optional> ! 87: </group> ! 88: </choice> ! 89: </define> ! 90: <define name="oshvm"> ! 91: <element name="os"> ! 92: <ref name="ostypehvm"/> ! 93: <interleave> ! 94: <optional> ! 95: <element name="loader"> ! 96: <ref name="absFilePath"/> ! 97: </element> ! 98: </optional> ! 99: <choice> ! 100: <ref name="osbootkernel"/> ! 101: <ref name="osbootdev"/> ! 102: </choice> ! 103: </interleave> ! 104: </element> ! 105: </define> ! 106: <define name="ostypexen"> ! 107: <element name="type"> ! 108: <optional> ! 109: <attribute name="arch"> ! 110: <choice> ! 111: <value>i686</value> ! 112: <value>x86_64</value> ! 113: <value>ia64</value> ! 114: </choice> ! 115: </attribute> ! 116: </optional> ! 117: <optional> ! 118: <attribute name="machine"> ! 119: <choice> ! 120: <value>xenpv</value> ! 121: <value>xenner</value> ! 122: </choice> ! 123: </attribute> ! 124: </optional> ! 125: <choice> ! 126: <value>xen</value> ! 127: <value>linux</value> ! 128: </choice> ! 129: </element> ! 130: </define> ! 131: <define name="ostypehvm"> ! 132: <element name="type"> ! 133: <optional> ! 134: <choice> ! 135: <ref name="hvmx86"/> ! 136: <ref name="hvmmips"/> ! 137: <ref name="hvmsparc"/> ! 138: <ref name="hvmppc"/> ! 139: </choice> ! 140: </optional> ! 141: <value>hvm</value> ! 142: </element> ! 143: </define> ! 144: <define name="hvmx86"> ! 145: <group> ! 146: <attribute name="arch"> ! 147: <choice> ! 148: <value>i686</value> ! 149: <value>x86_64</value> ! 150: </choice> ! 151: </attribute> ! 152: <attribute name="machine"> ! 153: <choice> ! 154: <value>xenfv</value> ! 155: <value>pc</value> ! 156: <value>isapc</value> ! 157: </choice> ! 158: </attribute> ! 159: </group> ! 160: </define> ! 161: <define name="hvmmips"> ! 162: <group> ! 163: <attribute name="arch"> ! 164: <value>mips</value> ! 165: </attribute> ! 166: <attribute name="machine"> ! 167: <value>mips</value> ! 168: </attribute> ! 169: </group> ! 170: </define> ! 171: <define name="hvmsparc"> ! 172: <group> ! 173: <attribute name="arch"> ! 174: <value>sparc</value> ! 175: </attribute> ! 176: <attribute name="machine"> ! 177: <value>sun4m</value> ! 178: </attribute> ! 179: </group> ! 180: </define> ! 181: <define name="hvmppc"> ! 182: <group> ! 183: <attribute name="arch"> ! 184: <value>ppc</value> ! 185: </attribute> ! 186: <attribute name="machine"> ! 187: <choice> ! 188: <value>g3beige</value> ! 189: <value>mac99</value> ! 190: <value>prep</value> ! 191: </choice> ! 192: </attribute> ! 193: </group> ! 194: </define> ! 195: <define name="osexe"> ! 196: <element name="os"> ! 197: <element name="type"> ! 198: <value>exe</value> ! 199: </element> ! 200: <interleave> ! 201: <optional> ! 202: <element name="init"> ! 203: <ref name="absFilePath"/> ! 204: </element> ! 205: </optional> ! 206: </interleave> ! 207: </element> ! 208: </define> ! 209: <!-- ! 210: The Identifiers can be: ! 211: - an optional id attribute with a number on the domain element ! 212: - a mandatory name ! 213: - an optional uuid ! 214: --> ! 215: <define name="ids"> ! 216: <optional> ! 217: <attribute name="id"> ! 218: <ref name="unsignedInt"/> ! 219: </attribute> ! 220: </optional> ! 221: <interleave> ! 222: <element name="name"> ! 223: <ref name="domainName"/> ! 224: </element> ! 225: <optional> ! 226: <element name="uuid"> ! 227: <ref name="UUID"/> ! 228: </element> ! 229: </optional> ! 230: </interleave> ! 231: </define> ! 232: <!-- ! 233: Resources usage defines the amount of memory (maximum and possibly ! 234: current usage) and number of virtual CPUs used by that domain. ! 235: We can't check here the rule that currentMemory <= memory ! 236: --> ! 237: <define name="resources"> ! 238: <interleave> ! 239: <element name="memory"> ! 240: <ref name="memoryKB"/> ! 241: </element> ! 242: <optional> ! 243: <element name="currentMemory"> ! 244: <ref name="memoryKB"/> ! 245: </element> ! 246: </optional> ! 247: <optional> ! 248: <element name="memoryBacking"> ! 249: <optional> ! 250: <element name="hugepages"> ! 251: <empty/> ! 252: </element> ! 253: </optional> ! 254: </element> ! 255: </optional> ! 256: <optional> ! 257: <element name="vcpu"> ! 258: <optional> ! 259: <attribute name="cpuset"/> ! 260: </optional> ! 261: <ref name="countCPU"/> ! 262: </element> ! 263: </optional> ! 264: </interleave> ! 265: </define> ! 266: <define name="clock"> ! 267: <optional> ! 268: <element name="clock"> ! 269: <attribute name="offset"> ! 270: <choice> ! 271: <value>localtime</value> ! 272: <value>utc</value> ! 273: </choice> ! 274: </attribute> ! 275: <empty/> ! 276: </element> ! 277: </optional> ! 278: </define> ! 279: <!-- ! 280: A bootloader may be used to extract the OS information instead of ! 281: defining the OS parameter in the instance. It points just to the ! 282: binary or script used to extract the data from the first disk device. ! 283: --> ! 284: <define name="bootloader"> ! 285: <interleave> ! 286: <element name="bootloader"> ! 287: <choice> ! 288: <ref name="absFilePath"/> ! 289: <empty/> ! 290: </choice> ! 291: </element> ! 292: <optional> ! 293: <element name="bootloader_args"> ! 294: <text/> ! 295: </element> ! 296: </optional> ! 297: </interleave> ! 298: </define> ! 299: <define name="osbootkernel"> ! 300: <interleave> ! 301: <element name="kernel"> ! 302: <ref name="absFilePath"/> ! 303: </element> ! 304: <optional> ! 305: <element name="initrd"> ! 306: <ref name="absFilePath"/> ! 307: </element> ! 308: </optional> ! 309: <optional> ! 310: <element name="root"> ! 311: <ref name="devicePath"/> ! 312: </element> ! 313: </optional> ! 314: <optional> ! 315: <element name="cmdline"> ! 316: <text/> ! 317: </element> ! 318: </optional> ! 319: </interleave> ! 320: </define> ! 321: <define name="osbootdev"> ! 322: <element name="boot"> ! 323: <attribute name="dev"> ! 324: <choice> ! 325: <value>hd</value> ! 326: <value>fd</value> ! 327: <value>cdrom</value> ! 328: <value>network</value> ! 329: </choice> ! 330: </attribute> ! 331: <empty/> ! 332: </element> ! 333: </define> ! 334: <define name="diskspec"> ! 335: <optional> ! 336: <ref name="driver"/> ! 337: </optional> ! 338: <ref name="target"/> ! 339: <optional> ! 340: <element name="readonly"> ! 341: <empty/> ! 342: </element> ! 343: </optional> ! 344: <optional> ! 345: <element name="shareable"> ! 346: <empty/> ! 347: </element> ! 348: </optional> ! 349: <optional> ! 350: <element name="serial"> ! 351: <ref name="diskSerial"/> ! 352: </element> ! 353: </optional> ! 354: </define> ! 355: <!-- ! 356: A disk description can be either of type file or block ! 357: The name of the attribute on the source element depends on the type ! 358: ! 359: --> ! 360: <define name="disk"> ! 361: <element name="disk"> ! 362: <optional> ! 363: <attribute name="device"> ! 364: <choice> ! 365: <value>floppy</value> ! 366: <value>disk</value> ! 367: <value>cdrom</value> ! 368: </choice> ! 369: </attribute> ! 370: </optional> ! 371: <choice> ! 372: <group> ! 373: <attribute name="type"> ! 374: <value>file</value> ! 375: </attribute> ! 376: <interleave> ! 377: <optional> ! 378: <element name="source"> ! 379: <attribute name="file"> ! 380: <ref name="absFilePath"/> ! 381: </attribute> ! 382: <empty/> ! 383: </element> ! 384: </optional> ! 385: <ref name="diskspec"/> ! 386: </interleave> ! 387: </group> ! 388: <group> ! 389: <attribute name="type"> ! 390: <value>block</value> ! 391: </attribute> ! 392: <interleave> ! 393: <optional> ! 394: <element name="source"> ! 395: <attribute name="dev"> ! 396: <ref name="deviceName"/> ! 397: </attribute> ! 398: <empty/> ! 399: </element> ! 400: </optional> ! 401: <ref name="diskspec"/> ! 402: </interleave> ! 403: </group> ! 404: <ref name="diskspec"/> ! 405: </choice> ! 406: </element> ! 407: </define> ! 408: <define name="target"> ! 409: <element name="target"> ! 410: <attribute name="dev"> ! 411: <ref name="deviceName"/> ! 412: </attribute> ! 413: <optional> ! 414: <attribute name="bus"> ! 415: <choice> ! 416: <value>ide</value> ! 417: <value>fdc</value> ! 418: <value>scsi</value> ! 419: <value>virtio</value> ! 420: <value>xen</value> ! 421: <value>usb</value> ! 422: <value>uml</value> ! 423: </choice> ! 424: </attribute> ! 425: </optional> ! 426: </element> ! 427: </define> ! 428: <!-- ! 429: Disk may use a special driver for access. Currently this is ! 430: only defined for Xen for tap/aio and file, but will certainly be ! 431: extended in the future, and libvirt doesn't look for specific values. ! 432: --> ! 433: <define name="driver"> ! 434: <element name="driver"> ! 435: <choice> ! 436: <group> ! 437: <ref name="driverFormat"/> ! 438: <optional> ! 439: <ref name="driverCache"/> ! 440: </optional> ! 441: </group> ! 442: <group> ! 443: <optional> ! 444: <ref name="driverFormat"/> ! 445: </optional> ! 446: <ref name="driverCache"/> ! 447: </group> ! 448: </choice> ! 449: <empty/> ! 450: </element> ! 451: </define> ! 452: <define name="driverFormat"> ! 453: <attribute name="name"> ! 454: <ref name="genericName"/> ! 455: </attribute> ! 456: <optional> ! 457: <attribute name="type"> ! 458: <ref name="genericName"/> ! 459: </attribute> ! 460: </optional> ! 461: </define> ! 462: <define name="driverCache"> ! 463: <attribute name="cache"> ! 464: <choice> ! 465: <value>none</value> ! 466: <value>writeback</value> ! 467: <value>writethrough</value> ! 468: </choice> ! 469: </attribute> ! 470: </define> ! 471: <define name="filesystem"> ! 472: <element name="filesystem"> ! 473: <choice> ! 474: <group> ! 475: <attribute name="type"> ! 476: <value>file</value> ! 477: </attribute> ! 478: <interleave> ! 479: <element name="source"> ! 480: <attribute name="file"> ! 481: <ref name="absFilePath"/> ! 482: </attribute> ! 483: <empty/> ! 484: </element> ! 485: <ref name="filesystemtgt"/> ! 486: </interleave> ! 487: </group> ! 488: <group> ! 489: <attribute name="type"> ! 490: <value>block</value> ! 491: </attribute> ! 492: <interleave> ! 493: <element name="source"> ! 494: <attribute name="dev"> ! 495: <ref name="deviceName"/> ! 496: </attribute> ! 497: <empty/> ! 498: </element> ! 499: <ref name="filesystemtgt"/> ! 500: </interleave> ! 501: </group> ! 502: <group> ! 503: <attribute name="type"> ! 504: <value>mount</value> ! 505: </attribute> ! 506: <interleave> ! 507: <element name="source"> ! 508: <attribute name="dir"> ! 509: <ref name="absFilePath"/> ! 510: </attribute> ! 511: <empty/> ! 512: </element> ! 513: <ref name="filesystemtgt"/> ! 514: </interleave> ! 515: </group> ! 516: <group> ! 517: <attribute name="type"> ! 518: <value>template</value> ! 519: </attribute> ! 520: <interleave> ! 521: <element name="source"> ! 522: <attribute name="name"> ! 523: <ref name="genericName"/> ! 524: </attribute> ! 525: <empty/> ! 526: </element> ! 527: <ref name="filesystemtgt"/> ! 528: </interleave> ! 529: </group> ! 530: </choice> ! 531: </element> ! 532: </define> ! 533: <define name="filesystemtgt"> ! 534: <element name="target"> ! 535: <attribute name="dir"> ! 536: <ref name="absDirPath"/> ! 537: </attribute> ! 538: <empty/> ! 539: </element> ! 540: </define> ! 541: <!-- ! 542: An interface description can either be of type bridge in which case ! 543: it will use a bridging source, or of type ethernet which uses a device ! 544: source and a device target instead. They both share a set of interface ! 545: options. FIXME ! 546: --> ! 547: <define name="interface"> ! 548: <element name="interface"> ! 549: <choice> ! 550: <group> ! 551: <attribute name="type"> ! 552: <value>bridge</value> ! 553: </attribute> ! 554: <interleave> ! 555: <optional> ! 556: <element name="source"> ! 557: <attribute name="bridge"> ! 558: <ref name="deviceName"/> ! 559: </attribute> ! 560: <empty/> ! 561: </element> ! 562: </optional> ! 563: <ref name="interface-options"/> ! 564: </interleave> ! 565: </group> ! 566: <group> ! 567: <attribute name="type"> ! 568: <value>ethernet</value> ! 569: </attribute> ! 570: <interleave> ! 571: <optional> ! 572: <element name="source"> ! 573: <attribute name="dev"> ! 574: <ref name="deviceName"/> ! 575: </attribute> ! 576: <empty/> ! 577: </element> ! 578: </optional> ! 579: <ref name="interface-options"/> ! 580: </interleave> ! 581: </group> ! 582: <group> ! 583: <attribute name="type"> ! 584: <value>network</value> ! 585: </attribute> ! 586: <interleave> ! 587: <element name="source"> ! 588: <attribute name="network"> ! 589: <ref name="deviceName"/> ! 590: </attribute> ! 591: <empty/> ! 592: </element> ! 593: <ref name="interface-options"/> ! 594: </interleave> ! 595: </group> ! 596: <group> ! 597: <attribute name="type"> ! 598: <value>user</value> ! 599: </attribute> ! 600: <interleave> ! 601: <ref name="interface-options"/> ! 602: </interleave> ! 603: </group> ! 604: <group> ! 605: <attribute name="type"> ! 606: <value>internal</value> ! 607: </attribute> ! 608: <interleave> ! 609: <element name="source"> ! 610: <attribute name="name"> ! 611: <ref name="deviceName"/> ! 612: </attribute> ! 613: <empty/> ! 614: </element> ! 615: <ref name="interface-options"/> ! 616: </interleave> ! 617: </group> ! 618: </choice> ! 619: </element> ! 620: </define> ! 621: <!-- ! 622: The interface options possible are: ! 623: - the MAC address ! 624: - the IP address bound to the interface ! 625: - the name of the script used to set up the binding ! 626: - the target device used ! 627: --> ! 628: <define name="interface-options"> ! 629: <interleave> ! 630: <optional> ! 631: <element name="target"> ! 632: <attribute name="dev"> ! 633: <ref name="deviceName"/> ! 634: </attribute> ! 635: <empty/> ! 636: </element> ! 637: </optional> ! 638: <optional> ! 639: <element name="mac"> ! 640: <attribute name="address"> ! 641: <ref name="addrMAC"/> ! 642: </attribute> ! 643: <empty/> ! 644: </element> ! 645: </optional> ! 646: <optional> ! 647: <element name="ip"> ! 648: <attribute name="address"> ! 649: <ref name="addrIP"/> ! 650: </attribute> ! 651: <empty/> ! 652: </element> ! 653: </optional> ! 654: <optional> ! 655: <element name="script"> ! 656: <attribute name="path"> ! 657: <ref name="filePath"/> ! 658: </attribute> ! 659: <empty/> ! 660: </element> ! 661: </optional> ! 662: <optional> ! 663: <element name="model"> ! 664: <attribute name="type"/> ! 665: <empty/> ! 666: </element> ! 667: </optional> ! 668: </interleave> ! 669: </define> ! 670: <!-- ! 671: An emulator description is just a path to the binary used for the task ! 672: --> ! 673: <define name="emulator"> ! 674: <element name="emulator"> ! 675: <ref name="absFilePath"/> ! 676: </element> ! 677: </define> ! 678: <!-- ! 679: A graphic description, currently in Xen only 2 types are supported: ! 680: - sdl with optional display, xauth and fullscreen ! 681: - vnc with a required port and optional listen IP address, password ! 682: and keymap ! 683: --> ! 684: <define name="graphic"> ! 685: <element name="graphics"> ! 686: <choice> ! 687: <group> ! 688: <attribute name="type"> ! 689: <value>sdl</value> ! 690: </attribute> ! 691: <optional> ! 692: <attribute name="display"> ! 693: <text/> ! 694: </attribute> ! 695: </optional> ! 696: <optional> ! 697: <attribute name="xauth"> ! 698: <text/> ! 699: </attribute> ! 700: </optional> ! 701: <optional> ! 702: <attribute name="fullscreen"> ! 703: <choice> ! 704: <value>yes</value> ! 705: <value>no</value> ! 706: </choice> ! 707: </attribute> ! 708: </optional> ! 709: </group> ! 710: <group> ! 711: <attribute name="type"> ! 712: <value>vnc</value> ! 713: </attribute> ! 714: <optional> ! 715: <attribute name="port"> ! 716: <ref name="PortNumber"/> ! 717: </attribute> ! 718: </optional> ! 719: <optional> ! 720: <attribute name="autoport"> ! 721: <choice> ! 722: <value>yes</value> ! 723: <value>no</value> ! 724: </choice> ! 725: </attribute> ! 726: </optional> ! 727: <optional> ! 728: <attribute name="listen"> ! 729: <ref name="addrIP"/> ! 730: </attribute> ! 731: </optional> ! 732: <optional> ! 733: <attribute name="passwd"> ! 734: <text/> ! 735: </attribute> ! 736: </optional> ! 737: <optional> ! 738: <attribute name="keymap"> ! 739: <text/> ! 740: </attribute> ! 741: </optional> ! 742: </group> ! 743: <group> ! 744: <attribute name="type"> ! 745: <value>rdp</value> ! 746: </attribute> ! 747: <optional> ! 748: <attribute name="port"> ! 749: <ref name="PortNumber"/> ! 750: </attribute> ! 751: </optional> ! 752: <optional> ! 753: <attribute name="autoport"> ! 754: <choice> ! 755: <value>yes</value> ! 756: <value>no</value> ! 757: </choice> ! 758: </attribute> ! 759: </optional> ! 760: <optional> ! 761: <attribute name="replaceUser"> ! 762: <choice> ! 763: <value>yes</value> ! 764: <value>no</value> ! 765: </choice> ! 766: </attribute> ! 767: </optional> ! 768: <optional> ! 769: <attribute name="multiUser"> ! 770: <choice> ! 771: <value>yes</value> ! 772: <value>no</value> ! 773: </choice> ! 774: </attribute> ! 775: </optional> ! 776: <optional> ! 777: <attribute name="listen"> ! 778: <ref name="addrIP"/> ! 779: </attribute> ! 780: </optional> ! 781: </group> ! 782: <group> ! 783: <attribute name="type"> ! 784: <value>desktop</value> ! 785: </attribute> ! 786: <optional> ! 787: <attribute name="display"> ! 788: <text/> ! 789: </attribute> ! 790: </optional> ! 791: <optional> ! 792: <attribute name="fullscreen"> ! 793: <choice> ! 794: <value>yes</value> ! 795: <value>no</value> ! 796: </choice> ! 797: </attribute> ! 798: </optional> ! 799: </group> ! 800: </choice> ! 801: </element> ! 802: </define> ! 803: <!-- ! 804: A graphic description, currently in Xen only 2 types are supported: ! 805: - sdl with optional display, xauth and fullscreen ! 806: - vnc with a required port and optional listen IP address, password ! 807: and keymap ! 808: --> ! 809: <define name="video"> ! 810: <element name="video"> ! 811: <optional> ! 812: <element name="model"> ! 813: <attribute name="type"> ! 814: <choice> ! 815: <value>vga</value> ! 816: <value>cirrus</value> ! 817: <value>vmvga</value> ! 818: <value>xen</value> ! 819: <value>vbox</value> ! 820: </choice> ! 821: </attribute> ! 822: <optional> ! 823: <attribute name="vram"> ! 824: <ref name="unsignedInt"/> ! 825: </attribute> ! 826: </optional> ! 827: <optional> ! 828: <attribute name="heads"> ! 829: <ref name="unsignedInt"/> ! 830: </attribute> ! 831: </optional> ! 832: <optional> ! 833: <element name="acceleration"> ! 834: <optional> ! 835: <attribute name="accel3d"> ! 836: <choice> ! 837: <value>yes</value> ! 838: <value>no</value> ! 839: </choice> ! 840: </attribute> ! 841: </optional> ! 842: <optional> ! 843: <attribute name="accel2d"> ! 844: <choice> ! 845: <value>yes</value> ! 846: <value>no</value> ! 847: </choice> ! 848: </attribute> ! 849: </optional> ! 850: </element> ! 851: </optional> ! 852: </element> ! 853: </optional> ! 854: </element> ! 855: </define> ! 856: <!-- ! 857: When a domain terminates multiple policies can be applied depending ! 858: on how it ended: ! 859: --> ! 860: <define name="termination"> ! 861: <interleave> ! 862: <optional> ! 863: <element name="on_reboot"> ! 864: <ref name="offOptions"/> ! 865: </element> ! 866: </optional> ! 867: <optional> ! 868: <element name="on_poweroff"> ! 869: <ref name="offOptions"/> ! 870: </element> ! 871: </optional> ! 872: <optional> ! 873: <element name="on_crash"> ! 874: <ref name="offOptions"/> ! 875: </element> ! 876: </optional> ! 877: </interleave> ! 878: </define> ! 879: <!-- ! 880: Options when a domain terminates: ! 881: destroy: The domain is cleaned up ! 882: restart: A new domain is started in place of the old one ! 883: preserve: The domain will remain in memory until it is destroyed manually ! 884: rename-restart: a variant of the previous one but where the old domain is ! 885: renamed before being saved to allow a restart ! 886: --> ! 887: <define name="offOptions"> ! 888: <choice> ! 889: <value>destroy</value> ! 890: <value>restart</value> ! 891: <value>preserve</value> ! 892: <value>rename-restart</value> ! 893: </choice> ! 894: </define> ! 895: <!-- ! 896: Specific setup for a qemu emulated character device. Note: this ! 897: definition doesn't fully specify the constraints on this node. ! 898: --> ! 899: <define name="qemucdev"> ! 900: <attribute name="type"> ! 901: <choice> ! 902: <value>dev</value> ! 903: <value>file</value> ! 904: <value>pipe</value> ! 905: <value>unix</value> ! 906: <value>tcp</value> ! 907: <value>udp</value> ! 908: <value>null</value> ! 909: <value>stdio</value> ! 910: <value>vc</value> ! 911: <value>pty</value> ! 912: </choice> ! 913: </attribute> ! 914: <interleave> ! 915: <optional> ! 916: <oneOrMore> ! 917: <element name="source"> ! 918: <optional> ! 919: <attribute name="mode"/> ! 920: </optional> ! 921: <optional> ! 922: <attribute name="path"/> ! 923: </optional> ! 924: <optional> ! 925: <attribute name="host"/> ! 926: </optional> ! 927: <optional> ! 928: <attribute name="service"/> ! 929: </optional> ! 930: <optional> ! 931: <attribute name="wiremode"/> ! 932: </optional> ! 933: </element> ! 934: </oneOrMore> ! 935: </optional> ! 936: <optional> ! 937: <element name="protocol"> ! 938: <optional> ! 939: <attribute name="type"/> ! 940: </optional> ! 941: </element> ! 942: </optional> ! 943: <optional> ! 944: <element name="target"> ! 945: <optional> ! 946: <attribute name="port"/> ! 947: </optional> ! 948: </element> ! 949: </optional> ! 950: </interleave> ! 951: </define> ! 952: <!-- ! 953: The description for a console ! 954: just a tty device ! 955: --> ! 956: <define name="console"> ! 957: <element name="console"> ! 958: <choice> ! 959: <group> ! 960: <optional> ! 961: <attribute name="tty"> ! 962: <ref name="devicePath"/> ! 963: </attribute> ! 964: </optional> ! 965: <empty/> ! 966: </group> ! 967: <ref name="qemucdev"/> ! 968: </choice> ! 969: </element> ! 970: </define> ! 971: <define name="sound"> ! 972: <element name="sound"> ! 973: <attribute name="model"> ! 974: <choice> ! 975: <value>sb16</value> ! 976: <value>es1370</value> ! 977: <value>pcspk</value> ! 978: <value>ac97</value> ! 979: </choice> ! 980: </attribute> ! 981: </element> ! 982: </define> ! 983: <define name="parallel"> ! 984: <element name="parallel"> ! 985: <ref name="qemucdev"/> ! 986: </element> ! 987: </define> ! 988: <define name="serial"> ! 989: <element name="serial"> ! 990: <ref name="qemucdev"/> ! 991: </element> ! 992: </define> ! 993: <define name="input"> ! 994: <element name="input"> ! 995: <attribute name="type"> ! 996: <choice> ! 997: <value>tablet</value> ! 998: <value>mouse</value> ! 999: </choice> ! 1000: </attribute> ! 1001: <optional> ! 1002: <attribute name="bus"> ! 1003: <choice> ! 1004: <value>ps2</value> ! 1005: <value>usb</value> ! 1006: <value>xen</value> ! 1007: </choice> ! 1008: </attribute> ! 1009: </optional> ! 1010: </element> ! 1011: </define> ! 1012: <define name="hostdev"> ! 1013: <element name="hostdev"> ! 1014: <optional> ! 1015: <attribute name="mode"> ! 1016: <choice> ! 1017: <value>subsystem</value> ! 1018: <value>capabilities</value> ! 1019: </choice> ! 1020: </attribute> ! 1021: <attribute name="type"> ! 1022: <choice> ! 1023: <value>usb</value> ! 1024: <value>pci</value> ! 1025: </choice> ! 1026: </attribute> ! 1027: <attribute name="managed"> ! 1028: <choice> ! 1029: <value>yes</value> ! 1030: <value>no</value> ! 1031: </choice> ! 1032: </attribute> ! 1033: </optional> ! 1034: <group> ! 1035: <element name="source"> ! 1036: <choice> ! 1037: <ref name="usbproduct"/> ! 1038: <ref name="usbaddress"/> ! 1039: <ref name="pciaddress"/> ! 1040: </choice> ! 1041: </element> ! 1042: </group> ! 1043: </element> ! 1044: </define> ! 1045: <define name="usbproduct"> ! 1046: <element name="vendor"> ! 1047: <attribute name="id"> ! 1048: <ref name="usbId"/> ! 1049: </attribute> ! 1050: </element> ! 1051: <element name="product"> ! 1052: <attribute name="id"> ! 1053: <ref name="usbId"/> ! 1054: </attribute> ! 1055: </element> ! 1056: </define> ! 1057: <define name="usbaddress"> ! 1058: <element name="address"> ! 1059: <attribute name="bus"> ! 1060: <ref name="usbAddr"/> ! 1061: </attribute> ! 1062: <attribute name="device"> ! 1063: <ref name="usbAddr"/> ! 1064: </attribute> ! 1065: </element> ! 1066: </define> ! 1067: <define name="pciaddress"> ! 1068: <element name="address"> ! 1069: <optional> ! 1070: <attribute name="domain"> ! 1071: <ref name="pciDomain"/> ! 1072: </attribute> ! 1073: </optional> ! 1074: <attribute name="bus"> ! 1075: <ref name="pciBus"/> ! 1076: </attribute> ! 1077: <attribute name="slot"> ! 1078: <ref name="pciSlot"/> ! 1079: </attribute> ! 1080: <attribute name="function"> ! 1081: <ref name="pciFunc"/> ! 1082: </attribute> ! 1083: </element> ! 1084: </define> ! 1085: <!-- ! 1086: Devices attached to a domain. ! 1087: --> ! 1088: <define name="devices"> ! 1089: <element name="devices"> ! 1090: <interleave> ! 1091: <optional> ! 1092: <ref name="emulator"/> ! 1093: </optional> ! 1094: <zeroOrMore> ! 1095: <choice> ! 1096: <ref name="disk"/> ! 1097: <ref name="filesystem"/> ! 1098: <ref name="interface"/> ! 1099: <ref name="input"/> ! 1100: <ref name="sound"/> ! 1101: <ref name="hostdev"/> ! 1102: <ref name="graphic"/> ! 1103: <ref name="video"/> ! 1104: <ref name="console"/> ! 1105: <ref name="parallel"/> ! 1106: <ref name="serial"/> ! 1107: </choice> ! 1108: </zeroOrMore> ! 1109: </interleave> ! 1110: </element> ! 1111: </define> ! 1112: <!-- ! 1113: A set of optional features: PAE, APIC and ACPI support ! 1114: --> ! 1115: <define name="features"> ! 1116: <optional> ! 1117: <element name="features"> ! 1118: <interleave> ! 1119: <optional> ! 1120: <element name="pae"> ! 1121: <empty/> ! 1122: </element> ! 1123: </optional> ! 1124: <optional> ! 1125: <element name="apic"> ! 1126: <empty/> ! 1127: </element> ! 1128: </optional> ! 1129: <optional> ! 1130: <element name="acpi"> ! 1131: <empty/> ! 1132: </element> ! 1133: </optional> ! 1134: </interleave> ! 1135: </element> ! 1136: </optional> ! 1137: </define> ! 1138: <!-- ! 1139: Type library ! 1140: ! 1141: Our unsignedInt doesn't allow a leading '+' in its lexical form ! 1142: A domain name shoul be made of ascii, numbers, _-+ and is non-empty ! 1143: UUID currently allows only the 32 characters strict syntax ! 1144: memoryKB request at least 4Mbytes though Xen will grow bigger if too low ! 1145: --> ! 1146: <define name="unsignedInt"> ! 1147: <data type="unsignedInt"> ! 1148: <param name="pattern">[0-9]+</param> ! 1149: </data> ! 1150: </define> ! 1151: <define name="countCPU"> ! 1152: <data type="unsignedShort"> ! 1153: <param name="pattern">[0-9]+</param> ! 1154: <param name="minInclusive">1</param> ! 1155: </data> ! 1156: </define> ! 1157: <define name="PortNumber"> ! 1158: <data type="short"> ! 1159: <param name="minInclusive">-1</param> ! 1160: </data> ! 1161: </define> ! 1162: <define name="memoryKB"> ! 1163: <data type="unsignedInt"> ! 1164: <param name="pattern">[0-9]+</param> ! 1165: <param name="minInclusive">4000</param> ! 1166: </data> ! 1167: </define> ! 1168: <define name="domainName"> ! 1169: <data type="string"> ! 1170: <param name="pattern">[A-Za-z0-9_\.\+\-&:/]+</param> ! 1171: </data> ! 1172: </define> ! 1173: <define name="diskSerial"> ! 1174: <data type="string"> ! 1175: <param name="pattern">[A-Za-z0-9_\.\+\-]+</param> ! 1176: </data> ! 1177: </define> ! 1178: <define name="genericName"> ! 1179: <data type="string"> ! 1180: <param name="pattern">[a-zA-Z0-9_\+\-]+</param> ! 1181: </data> ! 1182: </define> ! 1183: <define name="UUID"> ! 1184: <choice> ! 1185: <data type="string"> ! 1186: <param name="pattern">[a-fA-F0-9]{32}</param> ! 1187: </data> ! 1188: <data type="string"> ! 1189: <param name="pattern">[a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12}</param> ! 1190: </data> ! 1191: </choice> ! 1192: </define> ! 1193: <define name="filePath"> ! 1194: <data type="string"> ! 1195: <param name="pattern">[a-zA-Z0-9_\.\+\-&/%]+</param> ! 1196: </data> ! 1197: </define> ! 1198: <define name="absFilePath"> ! 1199: <data type="string"> ! 1200: <param name="pattern">/[a-zA-Z0-9_\.\+\-&/%]+</param> ! 1201: </data> ! 1202: </define> ! 1203: <define name="absDirPath"> ! 1204: <data type="string"> ! 1205: <param name="pattern">/[a-zA-Z0-9_\.\+\-&/%]*</param> ! 1206: </data> ! 1207: </define> ! 1208: <define name="devicePath"> ! 1209: <data type="string"> ! 1210: <param name="pattern">/[a-zA-Z0-9_\+\-/%]+</param> ! 1211: </data> ! 1212: </define> ! 1213: <define name="deviceName"> ! 1214: <data type="string"> ! 1215: <param name="pattern">[a-zA-Z0-9_\.\-:/]+</param> ! 1216: </data> ! 1217: </define> ! 1218: <define name="addrMAC"> ! 1219: <data type="string"> ! 1220: <param name="pattern">([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}</param> ! 1221: </data> ! 1222: </define> ! 1223: <define name="addrIP"> ! 1224: <data type="string"> ! 1225: <param name="pattern">([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9]</param> ! 1226: </data> ! 1227: </define> ! 1228: <define name="usbId"> ! 1229: <data type="string"> ! 1230: <param name="pattern">(0x)?[0-9a-fA-F]{1,4}</param> ! 1231: </data> ! 1232: </define> ! 1233: <define name="usbAddr"> ! 1234: <data type="string"> ! 1235: <param name="pattern">(0x)?[0-9a-fA-F]{1,3}</param> ! 1236: </data> ! 1237: </define> ! 1238: <define name="pciDomain"> ! 1239: <data type="string"> ! 1240: <param name="pattern">(0x)?[0-9a-fA-F]{1,4}</param> ! 1241: </data> ! 1242: </define> ! 1243: <define name="pciBus"> ! 1244: <data type="string"> ! 1245: <param name="pattern">(0x)?[0-9a-fA-F]{1,2}</param> ! 1246: </data> ! 1247: </define> ! 1248: <define name="pciSlot"> ! 1249: <data type="string"> ! 1250: <param name="pattern">(0x)?[0-1]?[0-9a-fA-F]</param> ! 1251: </data> ! 1252: </define> ! 1253: <define name="pciFunc"> ! 1254: <data type="string"> ! 1255: <param name="pattern">(0x)?[0-7]</param> ! 1256: </data> ! 1257: </define> ! 1258: </grammar>