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> 1259