1<?xml version="1.0"?>
2<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
3  <!-- domain-related definitions used in multiple grammars -->
4  <include href="basictypes.rng"/>
5  <include href="storagecommon.rng"/>
6  <include href="networkcommon.rng"/>
7  <include href="cputypes.rng"/>
8  <include href="nwfilter_params.rng"/>
9
10  <!--
11    description and title element, may be placed anywhere under the root
12    -->
13  <define name="description">
14    <element name="description">
15      <text/>
16    </element>
17  </define>
18
19  <define name="title">
20    <element name="title">
21      <ref name="objectNameWithSlash"/>
22    </element>
23  </define>
24
25  <define name="createMode">
26    <data type="unsignedInt">
27      <param name="pattern">0[0-7]{3}|[0-7]{1,3}</param>
28    </data>
29  </define>
30
31  <!--
32      We handle only document defining a domain
33    -->
34  <define name="domain">
35    <element name="domain">
36      <ref name="hvs"/>
37      <interleave>
38        <ref name="ids"/>
39        <optional>
40          <ref name="title"/>
41        </optional>
42        <optional>
43          <ref name="description"/>
44        </optional>
45        <optional>
46          <ref name="metadata"/>
47        </optional>
48        <optional>
49          <ref name="guestcpu"/>
50        </optional>
51        <zeroOrMore>
52          <ref name="sysinfo"/>
53        </zeroOrMore>
54        <ref name="os"/>
55        <ref name="clock"/>
56        <ref name="resources"/>
57        <ref name="features"/>
58        <ref name="events"/>
59        <optional>
60          <ref name="pm"/>
61        </optional>
62        <optional>
63          <ref name="perf"/>
64        </optional>
65        <optional>
66          <ref name="idmap"/>
67        </optional>
68        <optional>
69          <ref name="devices"/>
70        </optional>
71        <zeroOrMore>
72          <ref name="seclabel"/>
73        </zeroOrMore>
74        <optional>
75          <ref name="qemucmdline"/>
76        </optional>
77        <optional>
78          <ref name="qemucapabilities"/>
79        </optional>
80        <optional>
81          <ref name="qemudeprecation"/>
82        </optional>
83        <optional>
84          <ref name="lxcsharens"/>
85        </optional>
86        <optional>
87          <ref name="keywrap"/>
88        </optional>
89        <optional>
90          <ref name="launchSecurity"/>
91        </optional>
92        <optional>
93          <ref name="bhyvecmdline"/>
94        </optional>
95        <optional>
96          <ref name="xencmdline"/>
97        </optional>
98        <optional>
99          <ref name="vmwaredatacenterpath"/>
100        </optional>
101      </interleave>
102    </element>
103  </define>
104  <define name="seclabel">
105    <element name="seclabel">
106      <optional>
107        <attribute name="model">
108          <text/>
109        </attribute>
110      </optional>
111      <choice>
112        <group>
113          <!-- with dynamic label (default), relabel must be yes, baselabel
114               is optional, and label and imagelabel are output-only -->
115          <optional>
116            <attribute name="type">
117              <value>dynamic</value>
118            </attribute>
119          </optional>
120          <optional>
121            <attribute name="relabel">
122              <value>yes</value>
123            </attribute>
124          </optional>
125          <interleave>
126            <optional>
127              <element name="label">
128                <text/>
129              </element>
130            </optional>
131            <optional>
132              <element name="imagelabel">
133                <text/>
134              </element>
135            </optional>
136            <optional>
137              <element name="baselabel">
138                <text/>
139              </element>
140            </optional>
141          </interleave>
142        </group>
143        <group>
144          <!-- with static label, relabel can be either format (default
145               no), label is required, imagelabel is output-only, and no
146               baselabel is present -->
147          <attribute name="type">
148            <value>static</value>
149          </attribute>
150          <optional>
151            <attribute name="relabel">
152              <ref name="virYesNo"/>
153            </attribute>
154          </optional>
155          <interleave>
156            <element name="label">
157              <text/>
158            </element>
159            <optional>
160              <element name="imagelabel">
161                <text/>
162              </element>
163            </optional>
164          </interleave>
165        </group>
166        <group>
167          <!-- with none, relabel must be no if present -->
168          <attribute name="type">
169            <value>none</value>
170          </attribute>
171          <optional>
172            <attribute name="relabel">
173              <value>no</value>
174            </attribute>
175          </optional>
176        </group>
177      </choice>
178    </element>
179  </define>
180  <define name="devSeclabel">
181    <element name="seclabel">
182      <!-- A per-device seclabel override is more limited, either
183           relabel=no or a <label> must be present on input;
184           output also can include labelskip=yes.  -->
185      <optional>
186        <attribute name="model">
187          <text/>
188        </attribute>
189      </optional>
190      <choice>
191        <group>
192          <attribute name="relabel">
193            <value>no</value>
194          </attribute>
195        </group>
196        <group>
197          <attribute name="labelskip">
198            <value>yes</value>
199          </attribute>
200        </group>
201        <group>
202          <optional>
203            <attribute name="relabel">
204              <value>yes</value>
205            </attribute>
206          </optional>
207          <oneOrMore>
208            <element name="label">
209              <text/>
210            </element>
211          </oneOrMore>
212        </group>
213      </choice>
214    </element>
215  </define>
216  <define name="hvs">
217    <attribute name="type">
218      <choice>
219        <value>qemu</value>
220        <value>kqemu</value>
221        <value>kvm</value>
222        <value>xen</value>
223        <value>lxc</value>
224        <value>uml</value> <!-- NOT USED ANYMORE -->
225        <value>openvz</value>
226        <value>test</value>
227        <value>vmware</value>
228        <value>hyperv</value>
229        <value>vbox</value>
230        <value>phyp</value> <!-- NOT USED ANYMORE -->
231        <value>vz</value>
232        <value>bhyve</value>
233        <value>nvmm</value>
234      </choice>
235    </attribute>
236  </define>
237  <define name="os">
238    <choice>
239      <ref name="osxen"/>
240      <ref name="oshvm"/>
241      <ref name="osexe"/>
242    </choice>
243  </define>
244  <define name="osxen">
245    <choice>
246      <group>
247        <optional>
248          <ref name="bootloader"/>
249        </optional>
250        <element name="os">
251          <ref name="ostypexen"/>
252          <ref name="osbootkernel"/>
253        </element>
254      </group>
255      <group>
256        <ref name="bootloader"/>
257        <optional>
258          <element name="os">
259            <ref name="ostypexen"/>
260            <optional>
261              <ref name="osbootkernel"/>
262            </optional>
263          </element>
264        </optional>
265      </group>
266    </choice>
267  </define>
268  <define name="oshvm">
269    <optional>
270      <ref name="bootloader"/>
271    </optional>
272    <element name="os">
273      <interleave>
274        <optional>
275          <attribute name="firmware">
276            <choice>
277              <value>bios</value>
278              <value>efi</value>
279            </choice>
280          </attribute>
281        </optional>
282        <ref name="ostypehvm"/>
283        <optional>
284          <element name="firmware">
285            <oneOrMore>
286              <element name="feature">
287                <attribute name="enabled">
288                  <ref name="virYesNo"/>
289                </attribute>
290                <attribute name="name">
291                  <choice>
292                    <value>enrolled-keys</value>
293                    <value>secure-boot</value>
294                  </choice>
295                </attribute>
296              </element>
297            </oneOrMore>
298          </element>
299        </optional>
300        <optional>
301          <element name="loader">
302            <optional>
303              <attribute name="readonly">
304                <choice>
305                  <value>yes</value>
306                  <value>no</value>
307                </choice>
308              </attribute>
309            </optional>
310            <optional>
311              <attribute name="secure">
312                <choice>
313                  <value>yes</value>
314                  <value>no</value>
315                </choice>
316              </attribute>
317            </optional>
318            <optional>
319              <attribute name="type">
320                <choice>
321                  <value>rom</value>
322                  <value>pflash</value>
323                </choice>
324              </attribute>
325            </optional>
326            <optional>
327              <ref name="absFilePath"/>
328            </optional>
329          </element>
330        </optional>
331        <optional>
332          <element name="nvram">
333            <optional>
334              <attribute name="template">
335                <ref name="absFilePath"/>
336              </attribute>
337            </optional>
338            <optional>
339              <ref name="absFilePath"/>
340            </optional>
341          </element>
342        </optional>
343        <optional>
344          <ref name="osbootkernel"/>
345        </optional>
346        <zeroOrMore>
347          <ref name="osbootdev"/>
348        </zeroOrMore>
349        <optional>
350          <element name="bootmenu">
351            <attribute name="enable">
352              <ref name="virYesNo"/>
353            </attribute>
354            <optional>
355              <attribute name="timeout">
356                <ref name="unsignedShort"/>
357              </attribute>
358            </optional>
359          </element>
360        </optional>
361        <optional>
362          <ref name="smbios"/>
363        </optional>
364        <optional>
365          <ref name="bios"/>
366        </optional>
367        <optional>
368          <ref name="acpiTable"/>
369        </optional>
370      </interleave>
371    </element>
372  </define>
373  <define name="ostypexen">
374    <element name="type">
375      <optional>
376        <attribute name="arch">
377          <choice>
378            <value>i686</value>
379            <value>x86_64</value>
380            <value>ia64</value>
381          </choice>
382        </attribute>
383      </optional>
384      <optional>
385        <attribute name="machine">
386          <choice>
387            <value>xenpv</value>
388            <value>xenfv</value>
389            <value>xenpvh</value>
390          </choice>
391        </attribute>
392      </optional>
393      <choice>
394        <value>xen</value>
395        <value>linux</value>
396        <value>xenpvh</value>
397      </choice>
398    </element>
399  </define>
400  <define name="ostypehvm">
401    <element name="type">
402      <optional>
403        <attribute name="arch">
404          <ref name="archnames"/>
405        </attribute>
406      </optional>
407      <optional>
408        <attribute name="machine">
409          <data type="string">
410            <param name="pattern">[a-zA-Z0-9_\.\-]+</param>
411          </data>
412        </attribute>
413      </optional>
414      <value>hvm</value>
415    </element>
416  </define>
417
418  <define name="osexe">
419    <element name="os">
420      <element name="type">
421        <optional>
422          <attribute name="arch">
423            <ref name="archnames"/>
424          </attribute>
425        </optional>
426        <value>exe</value>
427      </element>
428      <interleave>
429        <optional>
430          <element name="init">
431            <ref name="absFilePath"/>
432          </element>
433        </optional>
434        <zeroOrMore>
435          <element name="initarg">
436            <text/>
437          </element>
438        </zeroOrMore>
439        <zeroOrMore>
440          <element name="initenv">
441            <attribute name="name">
442              <data type="string">
443                <param name="pattern">[a-zA-Z_]+[a-zA-Z0-9_]*</param>
444              </data>
445            </attribute>
446            <text/>
447          </element>
448        </zeroOrMore>
449        <optional>
450          <element name="initdir">
451            <ref name="absFilePath"/>
452          </element>
453        </optional>
454        <optional>
455          <element name="inituser">
456            <ref name="genericName"/>
457          </element>
458          <element name="initgroup">
459            <ref name="genericName"/>
460          </element>
461        </optional>
462      </interleave>
463    </element>
464  </define>
465
466  <define name="keywrap">
467    <element name="keywrap">
468      <oneOrMore>
469        <element name="cipher">
470          <attribute name="name">
471            <choice>
472              <value>aes</value>
473              <value>dea</value>
474            </choice>
475          </attribute>
476          <attribute name="state">
477            <ref name="virOnOff"/>
478          </attribute>
479        </element>
480      </oneOrMore>
481    </element>
482  </define>
483
484  <define name="launchSecurity">
485    <element name="launchSecurity">
486      <choice>
487        <group>
488          <ref name="launchSecuritySEV"/>
489        </group>
490        <group>
491          <attribute name="type">
492            <value>s390-pv</value>
493          </attribute>
494        </group>
495      </choice>
496    </element>
497  </define>
498
499  <define name="launchSecuritySEV">
500    <attribute name="type">
501      <value>sev</value>
502    </attribute>
503    <interleave>
504      <optional>
505        <element name="cbitpos">
506          <data type="unsignedInt"/>
507        </element>
508      </optional>
509      <optional>
510        <element name="reducedPhysBits">
511          <data type="unsignedInt"/>
512        </element>
513      </optional>
514      <element name="policy">
515        <ref name="hexuint"/>
516      </element>
517      <optional>
518        <element name="handle">
519          <ref name="unsignedInt"/>
520        </element>
521      </optional>
522      <optional>
523        <element name="dhCert">
524          <data type="string"/>
525        </element>
526      </optional>
527      <optional>
528        <element name="session">
529          <data type="string"/>
530        </element>
531      </optional>
532    </interleave>
533  </define>
534
535  <!--
536      Enable or disable perf events for the domain. For each
537      of the events the following rules apply:
538      on: the event will be forcefully enabled
539      off: the event will be forcefully disabled
540      not specified: the event will be disabled by default
541  -->
542  <define name="perf">
543    <element name="perf">
544      <oneOrMore>
545        <element name="event">
546          <attribute name="name">
547            <choice>
548              <value>cmt</value>
549              <value>mbmt</value>
550              <value>mbml</value>
551              <value>cpu_cycles</value>
552              <value>instructions</value>
553              <value>cache_references</value>
554              <value>cache_misses</value>
555              <value>branch_instructions</value>
556              <value>branch_misses</value>
557              <value>bus_cycles</value>
558              <value>stalled_cycles_frontend</value>
559              <value>stalled_cycles_backend</value>
560              <value>ref_cpu_cycles</value>
561              <value>cpu_clock</value>
562              <value>task_clock</value>
563              <value>page_faults</value>
564              <value>context_switches</value>
565              <value>cpu_migrations</value>
566              <value>page_faults_min</value>
567              <value>page_faults_maj</value>
568              <value>alignment_faults</value>
569              <value>emulation_faults</value>
570            </choice>
571          </attribute>
572          <attribute name="enabled">
573            <ref name="virYesNo"/>
574          </attribute>
575        </element>
576      </oneOrMore>
577    </element>
578  </define>
579
580  <define name="fibrechannel">
581    <element name="fibrechannel">
582      <attribute name="appid">
583        <data type="string">
584          <!-- All printable characters -->
585          <param name="pattern">[&#x20;-&#x7E;]{1,128}</param>
586        </data>
587      </attribute>
588    </element>
589  </define>
590
591  <!--
592      The Identifiers can be:
593      - an optional id attribute with a number on the domain element
594      - a mandatory name
595      - an optional uuid
596    -->
597  <define name="ids">
598    <optional>
599      <attribute name="id">
600        <ref name="unsignedInt"/>
601      </attribute>
602    </optional>
603    <interleave>
604      <element name="name">
605        <ref name="objectNameWithSlash"/>
606      </element>
607      <optional>
608        <element name="uuid">
609          <ref name="UUID"/>
610        </element>
611      </optional>
612      <optional>
613        <element name="genid">
614          <choice>
615            <ref name="UUID"/>
616            <empty/>
617          </choice>
618        </element>
619      </optional>
620    </interleave>
621  </define>
622  <define name="idmap">
623    <element name="idmap">
624      <interleave>
625        <zeroOrMore>
626          <element name="uid">
627            <attribute name="start">
628              <ref name="unsignedInt"/>
629            </attribute>
630            <attribute name="target">
631              <ref name="unsignedInt"/>
632            </attribute>
633            <attribute name="count">
634              <ref name="unsignedInt"/>
635            </attribute>
636            <empty/>
637          </element>
638        </zeroOrMore>
639        <zeroOrMore>
640          <element name="gid">
641            <attribute name="start">
642              <ref name="unsignedInt"/>
643            </attribute>
644            <attribute name="target">
645              <ref name="unsignedInt"/>
646            </attribute>
647            <attribute name="count">
648              <ref name="unsignedInt"/>
649            </attribute>
650            <empty/>
651          </element>
652        </zeroOrMore>
653      </interleave>
654    </element>
655  </define>
656  <!--
657      Resources usage defines the amount of memory (maximum and possibly
658      current usage) and number of virtual CPUs used by that domain.
659      We can't check here the rule that currentMemory <= memory
660    -->
661  <define name="resources">
662    <interleave>
663      <optional>
664        <element name="memory">
665          <ref name="scaledInteger"/>
666          <optional>
667            <attribute name="dumpCore">
668              <ref name="virOnOff"/>
669            </attribute>
670          </optional>
671        </element>
672      </optional>
673      <optional>
674        <element name="maxMemory">
675          <ref name="scaledInteger"/>
676          <attribute name="slots">
677            <ref name="unsignedInt"/>
678          </attribute>
679        </element>
680      </optional>
681      <optional>
682        <element name="currentMemory">
683          <ref name="scaledInteger"/>
684        </element>
685      </optional>
686      <optional>
687        <element name="memoryBacking">
688          <interleave>
689            <optional>
690              <element name="hugepages">
691                <zeroOrMore>
692                  <element name="page">
693                    <attribute name="size">
694                      <ref name="unsignedLong"/>
695                    </attribute>
696                    <optional>
697                      <attribute name="unit">
698                        <ref name="unit"/>
699                      </attribute>
700                    </optional>
701                    <optional>
702                      <attribute name="nodeset">
703                        <ref name="cpuset"/>
704                      </attribute>
705                    </optional>
706                    <empty/>
707                  </element>
708                </zeroOrMore>
709              </element>
710            </optional>
711            <optional>
712              <element name="nosharepages">
713                <empty/>
714              </element>
715            </optional>
716            <optional>
717              <element name="locked">
718                <empty/>
719              </element>
720            </optional>
721            <optional>
722              <element name="source">
723                <attribute name="type">
724                  <choice>
725                    <value>file</value>
726                    <value>anonymous</value>
727                    <value>memfd</value>
728                  </choice>
729                </attribute>
730              </element>
731            </optional>
732            <optional>
733              <element name="access">
734                <attribute name="mode">
735                  <choice>
736                    <value>shared</value>
737                    <value>private</value>
738                  </choice>
739                </attribute>
740              </element>
741            </optional>
742            <optional>
743              <element name="allocation">
744                <attribute name="mode">
745                  <choice>
746                    <value>immediate</value>
747                    <value>ondemand</value>
748                  </choice>
749                </attribute>
750              </element>
751            </optional>
752            <optional>
753              <element name="discard">
754                <empty/>
755              </element>
756            </optional>
757          </interleave>
758        </element>
759      </optional>
760
761      <optional>
762        <element name="vcpu">
763          <optional>
764            <attribute name="placement">
765              <choice>
766                <value>static</value>
767                <value>auto</value>
768              </choice>
769            </attribute>
770          </optional>
771          <optional>
772            <attribute name="cpuset">
773              <ref name="cpuset"/>
774            </attribute>
775          </optional>
776          <optional>
777            <attribute name="current">
778              <ref name="countCPU"/>
779            </attribute>
780          </optional>
781          <ref name="countCPU"/>
782        </element>
783      </optional>
784
785      <optional>
786        <element name="vcpus">
787          <zeroOrMore>
788            <element name="vcpu">
789              <attribute name="id">
790                <ref name="unsignedInt"/>
791              </attribute>
792              <attribute name="enabled">
793                <ref name="virYesNo"/>
794              </attribute>
795              <optional>
796                <attribute name="hotpluggable">
797                  <ref name="virYesNo"/>
798                </attribute>
799              </optional>
800              <optional>
801                <attribute name="order">
802                  <ref name="unsignedInt"/>
803                </attribute>
804              </optional>
805            </element>
806          </zeroOrMore>
807        </element>
808      </optional>
809
810      <optional>
811        <element name="iothreads">
812          <ref name="unsignedInt"/>
813        </element>
814      </optional>
815
816      <optional>
817        <element name="iothreadids">
818          <zeroOrMore>
819            <element name="iothread">
820              <attribute name="id">
821                <ref name="unsignedInt"/>
822              </attribute>
823            </element>
824          </zeroOrMore>
825        </element>
826      </optional>
827
828      <optional>
829        <ref name="blkiotune"/>
830      </optional>
831
832      <optional>
833        <ref name="memtune"/>
834      </optional>
835
836      <optional>
837        <ref name="cputune"/>
838      </optional>
839
840      <optional>
841        <ref name="numatune"/>
842      </optional>
843
844      <optional>
845        <ref name="respartition"/>
846      </optional>
847    </interleave>
848  </define>
849
850  <!-- The Blkio cgroup related tunables would go in the blkiotune -->
851  <define name="blkiotune">
852    <element name="blkiotune">
853      <interleave>
854        <!-- I/O weight the VM can use -->
855        <optional>
856          <element name="weight">
857            <ref name="weight"/>
858          </element>
859        </optional>
860        <zeroOrMore>
861          <element name="device">
862            <interleave>
863              <element name="path">
864                <ref name="absFilePath"/>
865              </element>
866              <optional>
867                <element name="weight">
868                  <ref name="weight"/>
869                </element>
870              </optional>
871              <optional>
872                <element name="read_iops_sec">
873                  <data type="unsignedInt"/>
874                </element>
875              </optional>
876              <optional>
877                <element name="write_iops_sec">
878                  <data type="unsignedInt"/>
879                </element>
880              </optional>
881              <optional>
882                <element name="read_bytes_sec">
883                  <data type="unsignedLong"/>
884                </element>
885              </optional>
886              <optional>
887                <element name="write_bytes_sec">
888                  <data type="unsignedLong"/>
889                </element>
890              </optional>
891            </interleave>
892          </element>
893        </zeroOrMore>
894      </interleave>
895    </element>
896  </define>
897
898  <!-- All the memory/swap related tunables would go in the memtune -->
899  <define name="memtune">
900    <element name="memtune">
901      <!-- Maximum memory the VM can use -->
902      <optional>
903        <element name="hard_limit">
904          <ref name="scaledInteger"/>
905        </element>
906      </optional>
907      <!-- Minimum memory ascertained for the VM during contention -->
908      <optional>
909        <element name="soft_limit">
910          <ref name="scaledInteger"/>
911        </element>
912      </optional>
913      <!-- Minimum amount of memory required to start the VM -->
914      <optional>
915        <element name="min_guarantee">
916          <ref name="scaledInteger"/>
917        </element>
918      </optional>
919      <!-- Maximum swap area the VM can use -->
920      <optional>
921        <element name="swap_hard_limit">
922          <ref name="scaledInteger"/>
923        </element>
924      </optional>
925    </element>
926  </define>
927
928  <!-- All the cpu related tunables would go in the cputune -->
929  <define name="cputune">
930    <element name="cputune">
931      <interleave>
932        <optional>
933          <element name="shares">
934            <ref name="cpushares"/>
935          </element>
936        </optional>
937        <optional>
938          <element name="global_period">
939            <ref name="cpuperiod"/>
940          </element>
941        </optional>
942        <optional>
943          <element name="global_quota">
944            <ref name="cpuquota"/>
945          </element>
946        </optional>
947        <optional>
948          <element name="period">
949            <ref name="cpuperiod"/>
950          </element>
951        </optional>
952        <optional>
953          <element name="quota">
954            <ref name="cpuquota"/>
955          </element>
956        </optional>
957        <optional>
958          <element name="emulator_period">
959            <ref name="cpuperiod"/>
960          </element>
961        </optional>
962        <optional>
963          <element name="emulator_quota">
964            <ref name="cpuquota"/>
965          </element>
966        </optional>
967        <optional>
968          <element name="iothread_period">
969            <ref name="cpuperiod"/>
970          </element>
971        </optional>
972        <optional>
973          <element name="iothread_quota">
974            <ref name="cpuquota"/>
975          </element>
976        </optional>
977        <zeroOrMore>
978          <element name="vcpupin">
979            <attribute name="vcpu">
980              <ref name="vcpuid"/>
981            </attribute>
982            <attribute name="cpuset">
983              <ref name="cpuset"/>
984            </attribute>
985          </element>
986        </zeroOrMore>
987        <optional>
988          <element name="emulatorpin">
989            <attribute name="cpuset">
990              <ref name="cpuset"/>
991            </attribute>
992          </element>
993        </optional>
994        <zeroOrMore>
995          <element name="iothreadpin">
996            <attribute name="iothread">
997              <ref name="unsignedInt"/>
998            </attribute>
999            <attribute name="cpuset">
1000              <ref name="cpuset"/>
1001            </attribute>
1002          </element>
1003        </zeroOrMore>
1004        <zeroOrMore>
1005          <element name="vcpusched">
1006            <optional>
1007              <attribute name="vcpus">
1008                <ref name="cpuset"/>
1009              </attribute>
1010            </optional>
1011            <ref name="schedparam"/>
1012          </element>
1013        </zeroOrMore>
1014        <zeroOrMore>
1015          <element name="iothreadsched">
1016            <optional>
1017              <attribute name="iothreads">
1018                <ref name="cpuset"/>
1019              </attribute>
1020            </optional>
1021            <ref name="schedparam"/>
1022          </element>
1023        </zeroOrMore>
1024        <optional>
1025          <element name="emulatorsched">
1026            <ref name="schedparam"/>
1027          </element>
1028        </optional>
1029        <zeroOrMore>
1030          <element name="cachetune">
1031            <attribute name="vcpus">
1032              <ref name="cpuset"/>
1033            </attribute>
1034            <optional>
1035              <attribute name="id">
1036                <data type="string"/>
1037              </attribute>
1038            </optional>
1039            <oneOrMore>
1040              <choice>
1041                <element name="cache">
1042                  <attribute name="id">
1043                    <ref name="unsignedInt"/>
1044                  </attribute>
1045                  <attribute name="level">
1046                    <ref name="unsignedInt"/>
1047                  </attribute>
1048                  <attribute name="type">
1049                    <choice>
1050                      <value>both</value>
1051                      <value>code</value>
1052                      <value>data</value>
1053                    </choice>
1054                  </attribute>
1055                  <attribute name="size">
1056                    <ref name="unsignedLong"/>
1057                  </attribute>
1058                  <optional>
1059                    <attribute name="unit">
1060                      <ref name="unit"/>
1061                    </attribute>
1062                  </optional>
1063                </element>
1064                <element name="monitor">
1065                  <attribute name="level">
1066                    <ref name="unsignedInt"/>
1067                  </attribute>
1068                  <attribute name="vcpus">
1069                    <ref name="cpuset"/>
1070                  </attribute>
1071                </element>
1072              </choice>
1073            </oneOrMore>
1074          </element>
1075        </zeroOrMore>
1076        <zeroOrMore>
1077          <element name="memorytune">
1078            <attribute name="vcpus">
1079              <ref name="cpuset"/>
1080            </attribute>
1081            <oneOrMore>
1082              <choice>
1083                <element name="node">
1084                  <attribute name="id">
1085                    <ref name="unsignedInt"/>
1086                  </attribute>
1087                  <attribute name="bandwidth">
1088                    <ref name="unsignedInt"/>
1089                  </attribute>
1090                </element>
1091                <element name="monitor">
1092                  <attribute name="vcpus">
1093                    <ref name="cpuset"/>
1094                  </attribute>
1095                </element>
1096              </choice>
1097            </oneOrMore>
1098          </element>
1099        </zeroOrMore>
1100      </interleave>
1101    </element>
1102  </define>
1103
1104  <define name="schedparam">
1105    <choice>
1106      <group>
1107        <attribute name="scheduler">
1108          <choice>
1109            <value>batch</value>
1110            <value>idle</value>
1111          </choice>
1112        </attribute>
1113      </group>
1114      <group>
1115        <attribute name="scheduler">
1116          <choice>
1117            <value>fifo</value>
1118            <value>rr</value>
1119          </choice>
1120        </attribute>
1121        <attribute name="priority">
1122          <ref name="unsignedShort"/>
1123        </attribute>
1124      </group>
1125    </choice>
1126  </define>
1127
1128  <!-- All the NUMA related tunables would go in the numatune -->
1129  <define name="numatune">
1130    <element name="numatune">
1131      <interleave>
1132        <optional>
1133          <element name="memory">
1134            <optional>
1135              <attribute name="mode">
1136                <choice>
1137                  <value>strict</value>
1138                  <value>preferred</value>
1139                  <value>interleave</value>
1140                  <value>restrictive</value>
1141                </choice>
1142              </attribute>
1143            </optional>
1144            <choice>
1145              <group>
1146                <optional>
1147                  <attribute name="placement">
1148                    <value>static</value>
1149                  </attribute>
1150                </optional>
1151                <optional>
1152                  <attribute name="nodeset">
1153                    <ref name="cpuset"/>
1154                  </attribute>
1155                </optional>
1156              </group>
1157              <attribute name="placement">
1158                <value>auto</value>
1159              </attribute>
1160            </choice>
1161          </element>
1162        </optional>
1163        <zeroOrMore>
1164          <element name="memnode">
1165            <attribute name="cellid">
1166              <ref name="unsignedInt"/>
1167            </attribute>
1168            <attribute name="mode">
1169              <choice>
1170                <value>strict</value>
1171                <value>preferred</value>
1172                <value>interleave</value>
1173                <value>restrictive</value>
1174              </choice>
1175            </attribute>
1176            <attribute name="nodeset">
1177              <ref name="cpuset"/>
1178            </attribute>
1179          </element>
1180        </zeroOrMore>
1181      </interleave>
1182    </element>
1183  </define>
1184
1185  <define name="respartition">
1186    <element name="resource">
1187      <optional>
1188        <element name="partition">
1189          <ref name="absFilePath"/>
1190        </element>
1191      </optional>
1192      <optional>
1193        <ref name="fibrechannel"/>
1194      </optional>
1195    </element>
1196  </define>
1197
1198  <define name="clock">
1199    <optional>
1200      <element name="clock">
1201        <choice>
1202          <group>
1203            <attribute name="offset">
1204              <choice>
1205                <value>localtime</value>
1206                <value>utc</value>
1207              </choice>
1208            </attribute>
1209            <optional>
1210              <attribute name="adjustment">
1211                <choice>
1212                  <ref name="timeDelta"/>
1213                  <value>reset</value>
1214                </choice>
1215              </attribute>
1216            </optional>
1217          </group>
1218          <group>
1219            <attribute name="offset">
1220              <value>timezone</value>
1221            </attribute>
1222            <optional>
1223              <attribute name="timezone">
1224                <ref name="timeZone"/>
1225              </attribute>
1226            </optional>
1227          </group>
1228          <group>
1229            <attribute name="offset">
1230              <value>variable</value>
1231            </attribute>
1232            <optional>
1233              <attribute name="adjustment">
1234                <ref name="timeDelta"/>
1235              </attribute>
1236            </optional>
1237            <optional>
1238              <attribute name="basis">
1239                <choice>
1240                  <value>utc</value>
1241                  <value>localtime</value>
1242                </choice>
1243              </attribute>
1244            </optional>
1245          </group>
1246        </choice>
1247        <zeroOrMore>
1248          <ref name="timer"/>
1249        </zeroOrMore>
1250      </element>
1251    </optional>
1252  </define>
1253  <define name="timer">
1254    <element name="timer">
1255      <choice>
1256        <group>
1257          <attribute name="name">
1258            <choice>
1259              <value>platform</value>
1260              <value>rtc</value>
1261            </choice>
1262          </attribute>
1263          <optional>
1264            <attribute name="track">
1265              <choice>
1266                <value>boot</value>
1267                <value>guest</value>
1268                <value>wall</value>
1269                <value>realtime</value>
1270              </choice>
1271            </attribute>
1272          </optional>
1273          <optional>
1274            <ref name="tickpolicy"/>
1275          </optional>
1276        </group>
1277        <group>
1278          <attribute name="name">
1279            <value>tsc</value>
1280          </attribute>
1281          <optional>
1282            <ref name="tickpolicy"/>
1283          </optional>
1284          <optional>
1285            <attribute name="frequency">
1286              <ref name="unsignedLong"/>
1287            </attribute>
1288          </optional>
1289          <optional>
1290            <attribute name="mode">
1291              <choice>
1292                <value>auto</value>
1293                <value>native</value>
1294                <value>emulate</value>
1295                <value>paravirt</value>
1296                <value>smpsafe</value>
1297              </choice>
1298            </attribute>
1299          </optional>
1300        </group>
1301        <group>
1302          <attribute name="name">
1303            <choice>
1304              <value>hpet</value>
1305              <value>pit</value>
1306              <value>armvtimer</value>
1307            </choice>
1308          </attribute>
1309          <optional>
1310            <ref name="tickpolicy"/>
1311          </optional>
1312        </group>
1313        <group>
1314          <attribute name="name">
1315            <choice>
1316              <value>kvmclock</value>
1317              <value>hypervclock</value>
1318            </choice>
1319          </attribute>
1320        </group>
1321      </choice>
1322      <optional>
1323        <attribute name="present">
1324          <ref name="virYesNo"/>
1325        </attribute>
1326      </optional>
1327      <empty/>
1328    </element>
1329  </define>
1330
1331  <define name="tickpolicy">
1332    <choice>
1333      <group>
1334        <attribute name="tickpolicy">
1335          <choice>
1336            <value>delay</value>
1337            <value>merge</value>
1338            <value>discard</value>
1339          </choice>
1340        </attribute>
1341      </group>
1342      <group>
1343        <attribute name="tickpolicy">
1344          <value>catchup</value>
1345        </attribute>
1346        <optional>
1347          <element name="catchup">
1348            <optional>
1349              <attribute name="threshold">
1350                <ref name="unsignedInt"/>
1351              </attribute>
1352            </optional>
1353            <optional>
1354              <attribute name="slew">
1355                <ref name="unsignedInt"/>
1356              </attribute>
1357            </optional>
1358            <optional>
1359              <attribute name="limit">
1360                <ref name="unsignedInt"/>
1361              </attribute>
1362            </optional>
1363          </element>
1364        </optional>
1365      </group>
1366    </choice>
1367  </define>
1368<!--
1369      A bootloader may be used to extract the OS information instead of
1370      defining the OS parameter in the instance. It points just to the
1371      binary or script used to extract the data from the first disk device.
1372    -->
1373  <define name="bootloader">
1374    <interleave>
1375      <optional>
1376        <element name="bootloader">
1377          <choice>
1378            <text/>
1379            <empty/>
1380          </choice>
1381        </element>
1382      </optional>
1383      <optional>
1384        <element name="bootloader_args">
1385          <text/>
1386        </element>
1387      </optional>
1388    </interleave>
1389  </define>
1390  <define name="osbootkernel">
1391    <interleave>
1392      <optional>
1393        <element name="kernel">
1394          <ref name="absFilePath"/>
1395        </element>
1396      </optional>
1397      <optional>
1398        <element name="initrd">
1399          <ref name="absFilePath"/>
1400        </element>
1401      </optional>
1402      <optional>
1403        <element name="root">
1404          <ref name="absFilePath"/>
1405        </element>
1406      </optional>
1407      <optional>
1408        <element name="cmdline">
1409          <text/>
1410        </element>
1411      </optional>
1412      <optional>
1413        <element name="dtb">
1414          <ref name="absFilePath"/>
1415        </element>
1416      </optional>
1417    </interleave>
1418  </define>
1419  <define name="osbootdev">
1420    <element name="boot">
1421      <attribute name="dev">
1422        <choice>
1423          <value>hd</value>
1424          <value>fd</value>
1425          <value>cdrom</value>
1426          <value>network</value>
1427        </choice>
1428      </attribute>
1429      <empty/>
1430    </element>
1431  </define>
1432  <define name="diskspec">
1433    <interleave>
1434      <optional>
1435        <ref name="diskDriver"/>
1436      </optional>
1437      <optional>
1438        <ref name="diskMirror"/>
1439      </optional>
1440      <optional>
1441        <ref name="diskAuth"/>
1442      </optional>
1443      <ref name="target"/>
1444      <optional>
1445        <ref name="deviceBoot"/>
1446      </optional>
1447      <optional>
1448        <element name="backenddomain">
1449          <attribute name="name">
1450            <ref name="objectNameWithSlash"/>
1451          </attribute>
1452          <empty/>
1453        </element>
1454      </optional>
1455      <optional>
1456        <element name="readonly">
1457          <empty/>
1458        </element>
1459      </optional>
1460      <optional>
1461        <element name="shareable">
1462          <empty/>
1463        </element>
1464      </optional>
1465      <optional>
1466        <element name="transient">
1467          <optional>
1468            <attribute name="shareBacking">
1469              <ref name='virYesNo'/>
1470            </attribute>
1471          </optional>
1472          <empty/>
1473        </element>
1474      </optional>
1475      <optional>
1476        <element name="serial">
1477          <ref name="diskSerial"/>
1478        </element>
1479      </optional>
1480      <optional>
1481        <ref name="encryption"/>
1482      </optional>
1483      <optional>
1484        <ref name="diskIoTune"/>
1485      </optional>
1486      <optional>
1487        <ref name="alias"/>
1488      </optional>
1489      <optional>
1490        <ref name="acpi"/>
1491      </optional>
1492      <optional>
1493        <ref name="address"/>
1494      </optional>
1495      <optional>
1496        <ref name="geometry"/>
1497      </optional>
1498      <optional>
1499        <ref name="diskBlockIo"/>
1500      </optional>
1501      <optional>
1502        <element name="wwn">
1503          <ref name="wwn"/>
1504        </element>
1505      </optional>
1506      <optional>
1507        <element name="vendor">
1508          <data type="string">
1509            <!-- All printable characters -->
1510            <param name="pattern">[&#x20;-&#x7E;]{0,8}</param>
1511          </data>
1512        </element>
1513      </optional>
1514      <optional>
1515        <element name="product">
1516          <data type="string">
1517            <!-- All printable characters -->
1518            <param name="pattern">[&#x20;-&#x7E;]{0,16}</param>
1519          </data>
1520        </element>
1521      </optional>
1522    </interleave>
1523  </define>
1524  <define name="snapshot">
1525    <attribute name="snapshot">
1526      <choice>
1527        <value>no</value>
1528        <value>internal</value>
1529        <value>external</value>
1530      </choice>
1531    </attribute>
1532  </define>
1533
1534  <define name="lease">
1535    <element name="lease">
1536      <interleave>
1537        <element name="lockspace">
1538          <text/>
1539        </element>
1540        <element name="key">
1541          <text/>
1542        </element>
1543        <element name="target">
1544          <attribute name="path">
1545            <text/>
1546          </attribute>
1547          <optional>
1548            <attribute name="offset">
1549              <ref name="unsignedInt"/>
1550            </attribute>
1551          </optional>
1552        </element>
1553      </interleave>
1554    </element>
1555  </define>
1556
1557  <define name="startupPolicy">
1558    <attribute name="startupPolicy">
1559      <choice>
1560        <value>mandatory</value>
1561        <value>requisite</value>
1562        <value>optional</value>
1563      </choice>
1564    </attribute>
1565  </define>
1566
1567  <!--
1568      A disk description can be either of type file or block
1569      The name of the attribute on the source element depends on the type
1570
1571    -->
1572  <define name="disk">
1573    <element name="disk">
1574      <choice>
1575        <group>
1576          <optional>
1577            <attribute name="device">
1578              <choice>
1579                <value>floppy</value>
1580                <value>disk</value>
1581                <value>cdrom</value>
1582              </choice>
1583            </attribute>
1584          </optional>
1585          <interleave>
1586            <ref name="diskSource"/>
1587            <ref name="diskSpecsExtra"/>
1588          </interleave>
1589        </group>
1590        <group>
1591          <attribute name="device">
1592            <value>lun</value>
1593          </attribute>
1594          <optional>
1595            <ref name="rawIO"/>
1596          </optional>
1597          <optional>
1598            <ref name="sgIO"/>
1599          </optional>
1600          <interleave>
1601            <choice>
1602              <ref name="diskSourceNetwork"/>
1603              <ref name="diskSourceBlock"/>
1604              <ref name="diskSourceVolume"/>
1605            </choice>
1606            <ref name="diskSpecsExtra"/>
1607          </interleave>
1608        </group>
1609      </choice>
1610      <optional>
1611        <attribute name="model">
1612          <choice>
1613            <value>virtio</value>
1614            <value>virtio-transitional</value>
1615            <value>virtio-non-transitional</value>
1616          </choice>
1617        </attribute>
1618      </optional>
1619      <optional>
1620        <ref name="snapshot"/>
1621      </optional>
1622    </element>
1623  </define>
1624
1625  <define name="diskSpecsExtra">
1626    <interleave>
1627      <ref name="storageSourceExtra"/>
1628      <ref name="diskBackingChain"/>
1629    </interleave>
1630  </define>
1631
1632  <define name="diskBackingChain">
1633    <choice>
1634      <ref name="diskBackingStore"/>
1635      <ref name="diskBackingStoreLast"/>
1636    </choice>
1637  </define>
1638
1639  <define name="diskBackingStore">
1640    <element name="backingStore">
1641      <optional>
1642        <attribute name="index">
1643          <ref name="positiveInteger"/>
1644        </attribute>
1645      </optional>
1646      <interleave>
1647        <ref name="diskSource"/>
1648        <ref name="diskBackingChain"/>
1649        <ref name="diskFormat"/>
1650      </interleave>
1651    </element>
1652  </define>
1653
1654  <define name="diskFormat">
1655    <element name="format">
1656      <attribute name="type">
1657        <ref name="storageFormat"/>
1658      </attribute>
1659      <optional>
1660        <element name="metadata_cache">
1661          <optional>
1662            <element name="max_size">
1663              <ref name="scaledInteger"/>
1664            </element>
1665          </optional>
1666        </element>
1667      </optional>
1668    </element>
1669  </define>
1670
1671  <define name="diskBackingStoreLast">
1672    <optional>
1673      <element name="backingStore">
1674        <empty/>
1675      </element>
1676    </optional>
1677  </define>
1678
1679  <define name="diskSourceSlice">
1680    <attribute name="offset">
1681      <ref name="unsignedInt"/>
1682    </attribute>
1683    <attribute name="size">
1684      <ref name="positiveInteger"/>
1685    </attribute>
1686  </define>
1687
1688  <define name="diskSourceCommon">
1689    <optional>
1690      <attribute name="index">
1691        <ref name="positiveInteger"/>
1692      </attribute>
1693    </optional>
1694    <optional>
1695      <element name="slices">
1696        <element name="slice">
1697          <attribute name="type">
1698            <value>storage</value>
1699          </attribute>
1700          <ref name="diskSourceSlice"/>
1701        </element>
1702      </element>
1703    </optional>
1704  </define>
1705
1706  <define name="diskSource">
1707    <choice>
1708      <ref name="diskSourceFile"/>
1709      <ref name="diskSourceBlock"/>
1710      <ref name="diskSourceDir"/>
1711      <ref name="diskSourceNetwork"/>
1712      <ref name="diskSourceVolume"/>
1713      <ref name="diskSourceNvme"/>
1714      <ref name="diskSourceVhostUser"/>
1715    </choice>
1716  </define>
1717
1718  <define name="diskSourceFile">
1719    <optional>
1720      <attribute name="type">
1721        <value>file</value>
1722      </attribute>
1723    </optional>
1724    <optional>
1725      <element name="source">
1726        <interleave>
1727          <optional>
1728            <attribute name="file">
1729              <choice>
1730                <ref name="absFilePath"/>
1731                <ref name="vmwarePath"/>
1732              </choice>
1733            </attribute>
1734          </optional>
1735          <ref name="diskSourceCommon"/>
1736          <optional>
1737            <ref name="storageStartupPolicy"/>
1738          </optional>
1739          <optional>
1740            <ref name="encryption"/>
1741          </optional>
1742          <zeroOrMore>
1743            <ref name="devSeclabel"/>
1744          </zeroOrMore>
1745        </interleave>
1746      </element>
1747    </optional>
1748  </define>
1749
1750  <define name="diskSourceBlock">
1751    <attribute name="type">
1752      <value>block</value>
1753    </attribute>
1754    <optional>
1755      <element name="source">
1756        <interleave>
1757          <optional>
1758            <attribute name="dev">
1759              <choice>
1760                <ref name="absFilePath"/>
1761                <ref name="deviceName"/>
1762              </choice>
1763            </attribute>
1764          </optional>
1765          <ref name="diskSourceCommon"/>
1766          <optional>
1767            <ref name="storageStartupPolicy"/>
1768          </optional>
1769          <optional>
1770            <ref name="encryption"/>
1771          </optional>
1772          <optional>
1773            <ref name="reservations"/>
1774          </optional>
1775          <zeroOrMore>
1776            <ref name="devSeclabel"/>
1777          </zeroOrMore>
1778        </interleave>
1779      </element>
1780    </optional>
1781  </define>
1782
1783  <define name="diskSourceDir">
1784    <attribute name="type">
1785      <value>dir</value>
1786    </attribute>
1787    <optional>
1788      <element name="source">
1789        <interleave>
1790          <attribute name="dir">
1791            <ref name="absFilePath"/>
1792          </attribute>
1793          <ref name="diskSourceCommon"/>
1794          <optional>
1795            <ref name="storageStartupPolicy"/>
1796          </optional>
1797          <optional>
1798            <ref name="encryption"/>
1799          </optional>
1800          <empty/>
1801        </interleave>
1802      </element>
1803    </optional>
1804  </define>
1805
1806  <define name="diskSourceNetworkHost">
1807    <element name="host">
1808      <choice>
1809        <group>
1810          <optional>
1811            <attribute name="transport">
1812              <choice>
1813                <value>tcp</value>
1814                <value>rdma</value>
1815              </choice>
1816            </attribute>
1817          </optional>
1818          <attribute name="name">
1819            <choice>
1820              <ref name="dnsName"/>
1821              <ref name="ipAddr"/>
1822            </choice>
1823          </attribute>
1824          <optional>
1825            <attribute name="port">
1826              <ref name="unsignedInt"/>
1827            </attribute>
1828          </optional>
1829        </group>
1830        <group>
1831          <attribute name="transport">
1832            <value>unix</value>
1833          </attribute>
1834          <attribute name="socket">
1835            <ref name="absFilePath"/>
1836          </attribute>
1837        </group>
1838      </choice>
1839    </element>
1840  </define>
1841
1842  <define name="diskSourceNetworkNFS">
1843    <element name="identity">
1844      <optional>
1845        <attribute name="user">
1846          <ref name="genericName"/>
1847        </attribute>
1848      </optional>
1849      <optional>
1850        <attribute name="group">
1851          <ref name="genericName"/>
1852        </attribute>
1853      </optional>
1854    </element>
1855  </define>
1856
1857  <define name="diskSourceNetworkProtocolRBD">
1858    <element name="source">
1859      <interleave>
1860        <attribute name="protocol">
1861          <value>rbd</value>
1862        </attribute>
1863        <ref name="diskSourceCommon"/>
1864        <optional>
1865          <attribute name="name"/>
1866        </optional>
1867        <zeroOrMore>
1868          <ref name="diskSourceNetworkHost"/>
1869        </zeroOrMore>
1870        <optional>
1871          <element name="snapshot">
1872            <attribute name="name">
1873              <ref name="genericName"/>
1874            </attribute>
1875            <empty/>
1876          </element>
1877        </optional>
1878        <optional>
1879          <element name="config">
1880            <attribute name="file">
1881              <ref name="absFilePath"/>
1882            </attribute>
1883            <empty/>
1884          </element>
1885        </optional>
1886        <optional>
1887          <ref name="diskAuth"/>
1888        </optional>
1889        <optional>
1890          <ref name="encryption"/>
1891        </optional>
1892        <empty/>
1893      </interleave>
1894    </element>
1895  </define>
1896
1897  <define name="diskSourceNetworkProtocolISCSI">
1898    <element name="source">
1899      <attribute name="protocol">
1900        <value>iscsi</value>
1901      </attribute>
1902      <attribute name="name"/>
1903      <interleave>
1904        <ref name="diskSourceCommon"/>
1905        <ref name="diskSourceNetworkHost"/>
1906        <optional>
1907          <ref name="diskAuth"/>
1908        </optional>
1909        <optional>
1910          <ref name="encryption"/>
1911        </optional>
1912        <optional>
1913          <ref name="initiatorinfo"/>
1914        </optional>
1915      </interleave>
1916    </element>
1917  </define>
1918
1919  <define name="diskSourceNetworkProtocolPropsCommon">
1920    <optional>
1921      <element name="readahead">
1922        <attribute name="size">
1923          <ref name="positiveInteger"/>
1924        </attribute>
1925        <empty/>
1926      </element>
1927    </optional>
1928    <optional>
1929      <element name="timeout">
1930        <attribute name="seconds">
1931          <ref name="positiveInteger"/>
1932        </attribute>
1933        <empty/>
1934      </element>
1935    </optional>
1936  </define>
1937
1938  <define name="diskSourceNetworkProtocolSSLVerify">
1939    <element name="ssl">
1940      <attribute name="verify">
1941        <ref name="virYesNo"/>
1942      </attribute>
1943      <empty/>
1944    </element>
1945  </define>
1946
1947  <define name="diskSourceNetworkProtocolHTTPCookies">
1948    <element name="cookies">
1949      <oneOrMore>
1950        <element name="cookie">
1951          <attribute name="name">
1952            <data type="string">
1953              <param name="pattern">[!#$%&amp;'*+\-.0-9A-Z\^_`a-z|~]+</param>
1954            </data>
1955          </attribute>
1956          <data type="string">
1957            <param name="pattern">"?[!#$%&amp;'()*+\-./0-9:&gt;=&lt;?@A-Z\^_`\[\]a-z|~]+"?</param>
1958          </data>
1959        </element>
1960      </oneOrMore>
1961      <empty/>
1962    </element>
1963  </define>
1964
1965  <define name="diskSourceNetworkProtocolHTTPS">
1966    <element name="source">
1967      <interleave>
1968        <attribute name="protocol">
1969          <choice>
1970            <value>https</value>
1971          </choice>
1972        </attribute>
1973        <attribute name="name"/>
1974        <optional>
1975          <attribute name="query"/>
1976        </optional>
1977        <ref name="diskSourceCommon"/>
1978        <ref name="diskSourceNetworkHost"/>
1979        <optional>
1980          <ref name="encryption"/>
1981        </optional>
1982        <optional>
1983          <ref name="diskSourceNetworkProtocolSSLVerify"/>
1984        </optional>
1985        <optional>
1986          <ref name="diskSourceNetworkProtocolHTTPCookies"/>
1987        </optional>
1988        <ref name="diskSourceNetworkProtocolPropsCommon"/>
1989        </interleave>
1990    </element>
1991  </define>
1992
1993  <define name="diskSourceNetworkProtocolHTTP">
1994    <element name="source">
1995      <interleave>
1996        <attribute name="protocol">
1997          <choice>
1998            <value>http</value>
1999          </choice>
2000        </attribute>
2001        <attribute name="name"/>
2002        <optional>
2003          <attribute name="query"/>
2004        </optional>
2005        <ref name="diskSourceCommon"/>
2006        <ref name="diskSourceNetworkHost"/>
2007        <optional>
2008          <ref name="encryption"/>
2009        </optional>
2010        <optional>
2011          <ref name="diskSourceNetworkProtocolHTTPCookies"/>
2012        </optional>
2013        <ref name="diskSourceNetworkProtocolPropsCommon"/>
2014      </interleave>
2015    </element>
2016  </define>
2017
2018  <define name="diskSourceNetworkProtocolFTPS">
2019    <element name="source">
2020      <interleave>
2021        <attribute name="protocol">
2022          <choice>
2023            <value>ftps</value>
2024          </choice>
2025        </attribute>
2026        <attribute name="name"/>
2027        <ref name="diskSourceCommon"/>
2028        <ref name="diskSourceNetworkHost"/>
2029        <optional>
2030          <ref name="encryption"/>
2031        </optional>
2032        <optional>
2033          <ref name="diskSourceNetworkProtocolSSLVerify"/>
2034        </optional>
2035        <ref name="diskSourceNetworkProtocolPropsCommon"/>
2036      </interleave>
2037    </element>
2038  </define>
2039
2040  <define name="diskSourceNetworkProtocolSimple">
2041    <element name="source">
2042      <interleave>
2043        <attribute name="protocol">
2044          <choice>
2045            <value>sheepdog</value>
2046            <value>ftp</value>
2047            <value>tftp</value>
2048          </choice>
2049        </attribute>
2050        <attribute name="name"/>
2051        <ref name="diskSourceCommon"/>
2052        <ref name="diskSourceNetworkHost"/>
2053        <optional>
2054          <ref name="encryption"/>
2055        </optional>
2056        <ref name="diskSourceNetworkProtocolPropsCommon"/>
2057      </interleave>
2058    </element>
2059  </define>
2060
2061  <define name="diskSourceNetworkProtocolNBD">
2062    <element name="source">
2063      <interleave>
2064        <attribute name="protocol">
2065          <value>nbd</value>
2066        </attribute>
2067        <optional>
2068          <attribute name="name"/>
2069        </optional>
2070        <optional>
2071          <attribute name="tls">
2072            <ref name="virYesNo"/>
2073          </attribute>
2074        </optional>
2075        <ref name="diskSourceCommon"/>
2076        <ref name="diskSourceNetworkHost"/>
2077        <optional>
2078          <ref name="encryption"/>
2079        </optional>
2080      </interleave>
2081    </element>
2082  </define>
2083
2084  <define name="diskSourceNetworkProtocolGluster">
2085    <element name="source">
2086      <interleave>
2087        <attribute name="protocol">
2088          <value>gluster</value>
2089        </attribute>
2090        <attribute name="name"/>
2091        <ref name="diskSourceCommon"/>
2092        <oneOrMore>
2093          <ref name="diskSourceNetworkHost"/>
2094        </oneOrMore>
2095        <optional>
2096          <ref name="encryption"/>
2097        </optional>
2098      </interleave>
2099    </element>
2100  </define>
2101
2102  <define name="diskSourceNetworkProtocolVxHS">
2103    <element name="source">
2104      <interleave>
2105        <attribute name="protocol">
2106          <choice>
2107            <value>vxhs</value>
2108          </choice>
2109        </attribute>
2110        <attribute name="name"/>
2111        <ref name="diskSourceCommon"/>
2112        <optional>
2113          <attribute name="tls">
2114            <ref name="virYesNo"/>
2115          </attribute>
2116        </optional>
2117        <ref name="diskSourceNetworkHost"/>
2118      </interleave>
2119    </element>
2120  </define>
2121
2122  <define name="diskSourceNetworkProtocolNFS">
2123    <element name="source">
2124      <interleave>
2125        <attribute name="protocol">
2126          <choice>
2127            <value>nfs</value>
2128          </choice>
2129        </attribute>
2130        <attribute name="name"/>
2131        <ref name="diskSourceCommon"/>
2132        <ref name="diskSourceNetworkHost"/>
2133        <ref name="diskSourceNetworkNFS"/>
2134      </interleave>
2135    </element>
2136  </define>
2137
2138  <define name="diskSourceNetwork">
2139    <attribute name="type">
2140      <value>network</value>
2141    </attribute>
2142    <choice>
2143      <ref name="diskSourceNetworkProtocolNBD"/>
2144      <ref name="diskSourceNetworkProtocolGluster"/>
2145      <ref name="diskSourceNetworkProtocolRBD"/>
2146      <ref name="diskSourceNetworkProtocolISCSI"/>
2147      <ref name="diskSourceNetworkProtocolHTTP"/>
2148      <ref name="diskSourceNetworkProtocolHTTPS"/>
2149      <ref name="diskSourceNetworkProtocolFTPS"/>
2150      <ref name="diskSourceNetworkProtocolSimple"/>
2151      <ref name="diskSourceNetworkProtocolVxHS"/>
2152      <ref name="diskSourceNetworkProtocolNFS"/>
2153    </choice>
2154  </define>
2155
2156  <define name="diskSourceVolume">
2157    <attribute name="type">
2158      <value>volume</value>
2159    </attribute>
2160    <optional>
2161      <element name="source">
2162        <interleave>
2163          <attribute name="pool">
2164            <ref name="objectName"/>
2165          </attribute>
2166          <attribute name="volume">
2167            <ref name="volName"/>
2168          </attribute>
2169          <optional>
2170            <attribute name="mode">
2171              <choice>
2172                <value>host</value>
2173                <value>direct</value>
2174              </choice>
2175            </attribute>
2176          </optional>
2177          <ref name="diskSourceCommon"/>
2178          <optional>
2179            <ref name="storageStartupPolicy"/>
2180          </optional>
2181          <optional>
2182            <ref name="encryption"/>
2183          </optional>
2184          <zeroOrMore>
2185            <ref name="devSeclabel"/>
2186          </zeroOrMore>
2187        </interleave>
2188      </element>
2189    </optional>
2190  </define>
2191
2192  <define name="diskSourceNvme">
2193    <attribute name="type">
2194      <value>nvme</value>
2195    </attribute>
2196    <optional>
2197      <element name="source">
2198        <interleave>
2199          <attribute name="type">
2200            <value>pci</value>
2201          </attribute>
2202          <attribute name="namespace">
2203            <ref name="uint32"/>
2204          </attribute>
2205          <optional>
2206            <attribute name="managed">
2207              <ref name="virYesNo"/>
2208            </attribute>
2209          </optional>
2210          <element name="address">
2211            <ref name="pciaddress"/>
2212          </element>
2213          <ref name="diskSourceCommon"/>
2214          <optional>
2215            <ref name="storageStartupPolicy"/>
2216          </optional>
2217          <optional>
2218            <ref name="encryption"/>
2219          </optional>
2220        </interleave>
2221      </element>
2222    </optional>
2223  </define>
2224
2225  <define name="diskSourceVhostUser">
2226    <attribute name="type">
2227      <value>vhostuser</value>
2228    </attribute>
2229    <element name="source">
2230      <attribute name="type">
2231        <value>unix</value>
2232      </attribute>
2233      <attribute name="path">
2234        <ref name="absFilePath"/>
2235      </attribute>
2236      <optional>
2237         <ref name="reconnect"/>
2238      </optional>
2239      <empty/>
2240    </element>
2241  </define>
2242
2243  <define name="diskTarget">
2244    <data type="string">
2245      <param name="pattern">(ioemu:)?(fd|hd|sd|vd|xvd|ubd)[a-zA-Z0-9_]+</param>
2246    </data>
2247  </define>
2248  <define name="target">
2249    <element name="target">
2250      <attribute name="dev">
2251        <ref name="diskTarget"/>
2252      </attribute>
2253      <optional>
2254        <attribute name="bus">
2255          <choice>
2256            <value>ide</value>
2257            <value>fdc</value>
2258            <value>scsi</value>
2259            <value>virtio</value>
2260            <value>xen</value>
2261            <value>usb</value>
2262            <value>uml</value> <!-- NOT USED ANYMORE -->
2263            <value>sata</value>
2264            <value>sd</value>
2265          </choice>
2266        </attribute>
2267      </optional>
2268      <optional>
2269        <attribute name="tray">
2270          <choice>
2271            <value>open</value>
2272            <value>closed</value>
2273          </choice>
2274        </attribute>
2275      </optional>
2276      <optional>
2277        <attribute name="removable">
2278          <ref name="virOnOff"/>
2279        </attribute>
2280      </optional>
2281      <optional>
2282        <attribute name="rotation_rate">
2283          <ref name="positiveInteger"/>
2284        </attribute>
2285      </optional>
2286    </element>
2287  </define>
2288  <define name="geometry">
2289    <element name="geometry">
2290      <attribute name="cyls">
2291        <data type="integer"/>
2292      </attribute>
2293      <attribute name="heads">
2294        <data type="integer"/>
2295      </attribute>
2296      <attribute name="secs">
2297        <data type="integer"/>
2298      </attribute>
2299      <optional>
2300        <attribute name="trans">
2301          <choice>
2302            <value>auto</value>
2303            <value>none</value>
2304            <value>lba</value>
2305          </choice>
2306        </attribute>
2307      </optional>
2308    </element>
2309  </define>
2310  <define name="diskBlockIo">
2311    <element name="blockio">
2312      <optional>
2313        <attribute name="logical_block_size">
2314          <data type="integer"/>
2315        </attribute>
2316      </optional>
2317      <optional>
2318        <attribute name="physical_block_size">
2319          <data type="integer"/>
2320        </attribute>
2321      </optional>
2322    </element>
2323  </define>
2324  <!--
2325      Disk may use a special driver for access.
2326    -->
2327  <define name="diskDriver">
2328    <element name="driver">
2329      <optional>
2330        <ref name="driverFormat"/>
2331      </optional>
2332      <optional>
2333        <ref name="driverCache"/>
2334      </optional>
2335      <optional>
2336        <ref name="driverErrorPolicy"/>
2337      </optional>
2338      <optional>
2339        <ref name="driverRerrorPolicy"/>
2340      </optional>
2341      <optional>
2342        <ref name="driverIO"/>
2343      </optional>
2344      <optional>
2345        <ref name="ioeventfd"/>
2346      </optional>
2347      <optional>
2348        <ref name="event_idx"/>
2349      </optional>
2350      <optional>
2351        <ref name="copy_on_read"/>
2352      </optional>
2353      <optional>
2354        <ref name="discard"/>
2355      </optional>
2356      <optional>
2357        <ref name="driverIOThread"/>
2358      </optional>
2359      <optional>
2360        <ref name="detect_zeroes"/>
2361      </optional>
2362      <optional>
2363        <attribute name="queues">
2364          <ref name="positiveInteger"/>
2365        </attribute>
2366      </optional>
2367      <optional>
2368        <attribute name="queue_size">
2369          <ref name="positiveInteger"/>
2370        </attribute>
2371      </optional>
2372      <ref name="virtioOptions"/>
2373      <optional>
2374        <element name="metadata_cache">
2375          <optional>
2376            <element name="max_size">
2377              <ref name="scaledInteger"/>
2378            </element>
2379          </optional>
2380        </element>
2381      </optional>
2382    </element>
2383  </define>
2384  <define name="driverFormat">
2385    <optional>
2386      <attribute name="name">
2387        <ref name="genericName"/>
2388      </attribute>
2389    </optional>
2390    <optional>
2391      <attribute name="type">
2392        <choice>
2393          <ref name="storageFormat"/>
2394          <value>aio</value> <!-- back-compat for "raw" -->
2395        </choice>
2396      </attribute>
2397    </optional>
2398  </define>
2399
2400  <define name="driverCache">
2401    <attribute name="cache">
2402      <choice>
2403        <value>default</value>
2404        <value>none</value>
2405        <value>writeback</value>
2406        <value>writethrough</value>
2407        <value>directsync</value>
2408        <value>unsafe</value>
2409      </choice>
2410    </attribute>
2411  </define>
2412  <define name="driverErrorPolicy">
2413    <attribute name="error_policy">
2414      <choice>
2415        <value>stop</value>
2416        <value>report</value>
2417        <value>ignore</value>
2418        <value>enospace</value>
2419      </choice>
2420    </attribute>
2421  </define>
2422  <define name="driverRerrorPolicy">
2423    <attribute name="rerror_policy">
2424      <choice>
2425        <value>stop</value>
2426        <value>report</value>
2427        <value>ignore</value>
2428      </choice>
2429    </attribute>
2430  </define>
2431  <define name="driverIO">
2432    <attribute name="io">
2433      <choice>
2434        <value>threads</value>
2435        <value>native</value>
2436        <value>io_uring</value>
2437      </choice>
2438    </attribute>
2439  </define>
2440  <define name="ioeventfd">
2441    <attribute name="ioeventfd">
2442      <ref name="virOnOff"/>
2443    </attribute>
2444  </define>
2445  <define name="event_idx">
2446    <attribute name="event_idx">
2447      <ref name="virOnOff"/>
2448    </attribute>
2449  </define>
2450  <define name="copy_on_read">
2451    <attribute name="copy_on_read">
2452      <ref name="virOnOff"/>
2453    </attribute>
2454  </define>
2455  <define name="discard">
2456    <attribute name="discard">
2457      <choice>
2458        <value>unmap</value>
2459        <value>ignore</value>
2460      </choice>
2461    </attribute>
2462  </define>
2463  <define name="driverIOThread">
2464    <attribute name="iothread">
2465      <ref name="unsignedInt"/>
2466    </attribute>
2467  </define>
2468  <define name="detect_zeroes">
2469    <attribute name="detect_zeroes">
2470      <choice>
2471        <value>off</value>
2472        <value>on</value>
2473        <value>unmap</value>
2474      </choice>
2475    </attribute>
2476  </define>
2477  <define name="controller">
2478    <element name="controller">
2479      <optional>
2480        <attribute name="index">
2481          <ref name="unsignedInt"/>
2482        </attribute>
2483      </optional>
2484      <interleave>
2485        <optional>
2486          <ref name="alias"/>
2487        </optional>
2488        <optional>
2489          <ref name="acpi"/>
2490        </optional>
2491        <optional>
2492          <ref name="address"/>
2493        </optional>
2494        <choice>
2495          <!-- fdc/sata/ccid have only the common attributes -->
2496          <group>
2497            <attribute name="type">
2498              <choice>
2499                <value>fdc</value>
2500                <value>sata</value>
2501                <value>ccid</value>
2502              </choice>
2503            </attribute>
2504          </group>
2505          <!-- scsi has an optional attribute "model" -->
2506          <group>
2507            <attribute name="type">
2508              <value>scsi</value>
2509            </attribute>
2510            <optional>
2511              <attribute name="model">
2512                <choice>
2513                  <value>auto</value>
2514                  <value>buslogic</value>
2515                  <value>lsilogic</value>
2516                  <value>lsisas1068</value>
2517                  <value>vmpvscsi</value>
2518                  <value>ibmvscsi</value>
2519                  <value>virtio-scsi</value>
2520                  <value>lsisas1078</value>
2521                  <value>virtio-transitional</value>
2522                  <value>virtio-non-transitional</value>
2523                  <value>ncr53c90</value>
2524                  <value>dc390</value>
2525                  <value>am53c974</value>
2526                </choice>
2527              </attribute>
2528            </optional>
2529          </group>
2530          <!-- usb has an optional attribute "model",
2531               and optional subelements "master" and "ports" -->
2532          <group>
2533            <attribute name="type">
2534              <value>usb</value>
2535            </attribute>
2536            <optional>
2537              <attribute name="model">
2538                <choice>
2539                  <value>piix3-uhci</value>
2540                  <value>piix4-uhci</value>
2541                  <value>ehci</value>
2542                  <value>ich9-ehci1</value>
2543                  <value>ich9-uhci1</value>
2544                  <value>ich9-uhci2</value>
2545                  <value>ich9-uhci3</value>
2546                  <value>vt82c686b-uhci</value>
2547                  <value>pci-ohci</value>
2548                  <value>nec-xhci</value>
2549                  <value>none</value>
2550                  <value>qusb1</value>
2551                  <value>qusb2</value>
2552                  <value>qemu-xhci</value>
2553                </choice>
2554              </attribute>
2555            </optional>
2556            <optional>
2557              <ref name="usbmaster"/>
2558            </optional>
2559            <optional>
2560              <attribute name="ports">
2561                <ref name="unsignedInt"/>
2562              </attribute>
2563            </optional>
2564          </group>
2565          <!-- ide has an optional attribute "model" -->
2566          <group>
2567            <attribute name="type">
2568              <value>ide</value>
2569            </attribute>
2570            <optional>
2571              <attribute name="model">
2572                <choice>
2573                  <value>piix3</value>
2574                  <value>piix4</value>
2575                  <value>ich6</value>
2576                </choice>
2577              </attribute>
2578            </optional>
2579          </group>
2580          <!-- isa -->
2581          <group>
2582            <attribute name="type">
2583              <value>isa</value>
2584            </attribute>
2585          </group>
2586          <!-- pci has an optional attribute "model" -->
2587          <group>
2588            <attribute name="type">
2589              <value>pci</value>
2590            </attribute>
2591            <optional>
2592              <element name="model">
2593                <attribute name="name">
2594                  <choice>
2595                    <!-- implementations of "pci-root" -->
2596                    <value>spapr-pci-host-bridge</value>
2597                    <!-- implementations of "pci-bridge" -->
2598                    <value>pci-bridge</value>
2599                    <!-- implementations of "dmi-to-pci-bridge" -->
2600                    <value>i82801b11-bridge</value>
2601                    <!-- implementations of "pcie-to-pci-bridge" -->
2602                    <value>pcie-pci-bridge</value>
2603                    <!-- implementations of "pcie-root-port" -->
2604                    <value>ioh3420</value>
2605                    <value>pcie-root-port</value>
2606                    <!-- implementations of "pcie-switch-upstream-port" -->
2607                    <value>x3130-upstream</value>
2608                    <!-- implementations of "pcie-switch-downstream-port" -->
2609                    <value>xio3130-downstream</value>
2610                    <!-- implementations of "pci-expander-bus" -->
2611                    <value>pxb</value>
2612                    <!-- implementations of "pcie-expander-bus" -->
2613                    <value>pxb-pcie</value>
2614                  </choice>
2615                </attribute>
2616                <empty/>
2617              </element>
2618            </optional>
2619            <optional>
2620              <element name="target">
2621                <optional>
2622                  <attribute name="chassisNr">
2623                    <ref name="uint8"/>
2624                  </attribute>
2625                </optional>
2626                <optional>
2627                  <attribute name="chassis">
2628                    <ref name="uint8"/>
2629                  </attribute>
2630                </optional>
2631                <optional>
2632                  <attribute name="port">
2633                    <ref name="uint8"/>
2634                  </attribute>
2635                </optional>
2636                <optional>
2637                  <attribute name="busNr">
2638                    <ref name="uint8"/>
2639                  </attribute>
2640                </optional>
2641                <optional>
2642                  <attribute name="index">
2643                    <ref name="uint8"/>
2644                  </attribute>
2645                </optional>
2646                <optional>
2647                  <attribute name="hotplug">
2648                    <ref name="virOnOff"/>
2649                  </attribute>
2650                </optional>
2651                <optional>
2652                  <element name="node">
2653                    <ref name="unsignedInt"/>
2654                  </element>
2655                </optional>
2656              </element>
2657            </optional>
2658            <!-- *-root controllers have an optional element "pcihole64"-->
2659            <choice>
2660              <group>
2661                <attribute name="model">
2662                  <choice>
2663                    <value>pci-root</value>
2664                    <value>pcie-root</value>
2665                  </choice>
2666                </attribute>
2667                <optional>
2668                  <element name="pcihole64">
2669                    <ref name="scaledInteger"/>
2670                  </element>
2671                </optional>
2672              </group>
2673              <group>
2674                <attribute name="model">
2675                  <choice>
2676                    <value>pci-bridge</value>
2677                    <value>dmi-to-pci-bridge</value>
2678                    <value>pcie-to-pci-bridge</value>
2679                    <value>pcie-root-port</value>
2680                    <value>pcie-switch-upstream-port</value>
2681                    <value>pcie-switch-downstream-port</value>
2682                    <value>pci-expander-bus</value>
2683                    <value>pcie-expander-bus</value>
2684                  </choice>
2685                </attribute>
2686              </group>
2687            </choice>
2688          </group>
2689          <!-- virtio-serial has optional "ports" and "vectors" -->
2690          <group>
2691            <attribute name="type">
2692              <value>virtio-serial</value>
2693            </attribute>
2694            <optional>
2695              <attribute name="model">
2696                <choice>
2697                  <value>virtio</value>
2698                  <value>virtio-transitional</value>
2699                  <value>virtio-non-transitional</value>
2700                </choice>
2701              </attribute>
2702            </optional>
2703            <optional>
2704              <attribute name="ports">
2705                <ref name="unsignedInt"/>
2706              </attribute>
2707            </optional>
2708            <optional>
2709              <attribute name="vectors">
2710                <ref name="unsignedInt"/>
2711              </attribute>
2712            </optional>
2713          </group>
2714          <!-- xenbus has an optional attribute "maxGrantFrames" -->
2715          <group>
2716            <attribute name="type">
2717              <value>xenbus</value>
2718            </attribute>
2719            <optional>
2720              <attribute name="maxGrantFrames">
2721                <ref name="unsignedInt"/>
2722              </attribute>
2723            </optional>
2724            <optional>
2725              <attribute name="maxEventChannels">
2726                <ref name="unsignedInt"/>
2727              </attribute>
2728            </optional>
2729          </group>
2730        </choice>
2731        <optional>
2732          <element name="driver">
2733            <optional>
2734              <attribute name="queues">
2735                <ref name="unsignedInt"/>
2736              </attribute>
2737            </optional>
2738            <optional>
2739              <attribute name="cmd_per_lun">
2740                <ref name="unsignedInt"/>
2741              </attribute>
2742            </optional>
2743            <optional>
2744              <attribute name="max_sectors">
2745                <ref name="unsignedInt"/>
2746              </attribute>
2747            </optional>
2748            <optional>
2749              <ref name="ioeventfd"/>
2750            </optional>
2751            <optional>
2752              <ref name="driverIOThread"/>
2753            </optional>
2754            <ref name="virtioOptions"/>
2755          </element>
2756        </optional>
2757      </interleave>
2758    </element>
2759  </define>
2760  <define name="filesystem">
2761    <element name="filesystem">
2762      <interleave>
2763        <choice>
2764          <group>
2765            <attribute name="type">
2766              <value>file</value>
2767            </attribute>
2768            <interleave>
2769              <optional>
2770                <ref name="fsDriver"/>
2771              </optional>
2772              <element name="source">
2773                <attribute name="file">
2774                  <ref name="absFilePath"/>
2775                </attribute>
2776                <empty/>
2777              </element>
2778            </interleave>
2779          </group>
2780          <group>
2781            <attribute name="type">
2782              <value>block</value>
2783            </attribute>
2784            <interleave>
2785              <optional>
2786                <ref name="fsDriver"/>
2787              </optional>
2788              <element name="source">
2789                <attribute name="dev">
2790                  <ref name="absFilePath"/>
2791                </attribute>
2792                <empty/>
2793              </element>
2794            </interleave>
2795          </group>
2796          <group>
2797            <!-- type="mount" is default -->
2798            <optional>
2799              <attribute name="type">
2800                <value>mount</value>
2801              </attribute>
2802            </optional>
2803            <interleave>
2804              <optional>
2805                <ref name="fsDriver"/>
2806              </optional>
2807              <optional>
2808                <ref name="fsBinary"/>
2809              </optional>
2810              <element name="source">
2811                <choice>
2812                  <group>
2813                    <attribute name="dir">
2814                      <ref name="absDirPath"/>
2815                    </attribute>
2816                  </group>
2817                  <group>
2818                    <attribute name="socket">
2819                      <ref name="absFilePath"/>
2820                    </attribute>
2821                  </group>
2822                </choice>
2823                <empty/>
2824              </element>
2825            </interleave>
2826          </group>
2827          <group>
2828            <optional>
2829              <attribute name="type">
2830                <value>bind</value>
2831              </attribute>
2832            </optional>
2833            <interleave>
2834              <optional>
2835                <ref name="fsDriver"/>
2836              </optional>
2837              <element name="source">
2838                <attribute name="dir">
2839                  <ref name="absDirPath"/>
2840                </attribute>
2841                <empty/>
2842              </element>
2843            </interleave>
2844          </group>
2845          <group>
2846            <attribute name="type">
2847              <value>template</value>
2848            </attribute>
2849            <interleave>
2850              <optional>
2851                <ref name="fsDriver"/>
2852              </optional>
2853              <element name="source">
2854                <attribute name="name">
2855                  <ref name="genericName"/>
2856                </attribute>
2857                <empty/>
2858              </element>
2859            </interleave>
2860          </group>
2861          <group>
2862            <attribute name="type">
2863              <value>ram</value>
2864            </attribute>
2865            <interleave>
2866              <optional>
2867                <ref name="fsDriver"/>
2868              </optional>
2869              <element name="source">
2870                <attribute name="usage">
2871                  <ref name="unsignedLong"/>
2872                </attribute>
2873                <optional>
2874                  <attribute name="units">
2875                    <ref name="unit"/>
2876                  </attribute>
2877                </optional>
2878                <empty/>
2879              </element>
2880            </interleave>
2881          </group>
2882        </choice>
2883        <interleave>
2884          <element name="target">
2885            <attribute name="dir"/>
2886            <empty/>
2887          </element>
2888          <optional>
2889            <attribute name="accessmode">
2890              <choice>
2891                <value>passthrough</value>
2892                <value>mapped</value>
2893                <value>squash</value>
2894              </choice>
2895            </attribute>
2896          </optional>
2897          <optional>
2898            <attribute name="multidevs">
2899              <choice>
2900                <value>default</value>
2901                <value>remap</value>
2902                <value>forbid</value>
2903                <value>warn</value>
2904              </choice>
2905            </attribute>
2906          </optional>
2907          <optional>
2908            <attribute name="fmode">
2909              <ref name="createMode"/>
2910            </attribute>
2911          </optional>
2912          <optional>
2913            <attribute name="dmode">
2914              <ref name="createMode"/>
2915            </attribute>
2916          </optional>
2917          <optional>
2918            <element name="readonly">
2919              <empty/>
2920            </element>
2921          </optional>
2922          <optional>
2923            <ref name="deviceBoot"/>
2924          </optional>
2925          <optional>
2926            <ref name="alias"/>
2927          </optional>
2928          <optional>
2929            <ref name="acpi"/>
2930          </optional>
2931          <optional>
2932            <ref name="address"/>
2933          </optional>
2934        </interleave>
2935        <interleave>
2936          <optional>
2937            <element name="space_hard_limit">
2938              <ref name="scaledInteger"/>
2939            </element>
2940          </optional>
2941          <optional>
2942            <element name="space_soft_limit">
2943              <ref name="scaledInteger"/>
2944            </element>
2945          </optional>
2946        </interleave>
2947        <optional>
2948          <attribute name="model">
2949            <choice>
2950              <value>virtio</value>
2951              <value>virtio-transitional</value>
2952              <value>virtio-non-transitional</value>
2953            </choice>
2954          </attribute>
2955        </optional>
2956      </interleave>
2957    </element>
2958  </define>
2959  <define name="fsDriver">
2960    <element name="driver">
2961      <!-- Annoying inconsistency. "disk" uses "name"
2962           for this kind of info, and "type" for the
2963           storage format. We need the latter too, so
2964           had to invent a new attribute name -->
2965      <choice>
2966        <group>
2967          <optional>
2968            <attribute name="type">
2969              <choice>
2970                <value>path</value>
2971                <value>handle</value>
2972                <value>loop</value>
2973                <value>nbd</value>
2974                <value>ploop</value>
2975              </choice>
2976            </attribute>
2977          </optional>
2978          <optional>
2979            <attribute name="format">
2980              <ref name="storageFormat"/>
2981            </attribute>
2982          </optional>
2983          <optional>
2984            <attribute name="wrpolicy">
2985              <value>immediate</value>
2986            </attribute>
2987          </optional>
2988          <ref name="virtioOptions"/>
2989        </group>
2990        <group>
2991          <attribute name="type">
2992            <value>virtiofs</value>
2993          </attribute>
2994          <optional>
2995            <attribute name="queue">
2996              <ref name="unsignedInt"/>
2997            </attribute>
2998          </optional>
2999          <ref name="virtioOptions"/>
3000        </group>
3001        <empty/>
3002      </choice>
3003    </element>
3004  </define>
3005  <define name="fsBinary">
3006    <element name="binary">
3007      <optional>
3008        <attribute name="path">
3009          <ref name="absFilePath"/>
3010        </attribute>
3011      </optional>
3012      <optional>
3013        <attribute name="xattr">
3014          <ref name="virOnOff"/>
3015        </attribute>
3016      </optional>
3017      <interleave>
3018        <optional>
3019          <element name="cache">
3020            <optional>
3021              <attribute name="mode">
3022                <choice>
3023                  <value>none</value>
3024                  <value>always</value>
3025                </choice>
3026              </attribute>
3027            </optional>
3028          </element>
3029        </optional>
3030        <optional>
3031          <element name="sandbox">
3032            <optional>
3033              <attribute name="mode">
3034                <choice>
3035                  <value>namespace</value>
3036                  <value>chroot</value>
3037                </choice>
3038              </attribute>
3039            </optional>
3040          </element>
3041        </optional>
3042        <optional>
3043          <element name="lock">
3044            <optional>
3045              <attribute name="posix">
3046                <ref name="virOnOff"/>
3047              </attribute>
3048            </optional>
3049            <optional>
3050              <attribute name="flock">
3051                <ref name="virOnOff"/>
3052              </attribute>
3053            </optional>
3054          </element>
3055        </optional>
3056      </interleave>
3057    </element>
3058  </define>
3059
3060  <define name="interface-network-attributes">
3061    <attribute name="network">
3062      <text/>
3063    </attribute>
3064    <optional>
3065      <attribute name="portgroup">
3066        <ref name="deviceName"/>
3067      </attribute>
3068    </optional>
3069    <optional>
3070      <attribute name="portid">
3071        <ref name="UUID"/>
3072      </attribute>
3073    </optional>
3074  </define>
3075
3076  <define name="interface-bridge-attributes">
3077    <attribute name="bridge">
3078      <data type="string">
3079        <param name="pattern">[a-zA-Z0-9_\.\-\\:/ ]*</param>
3080      </data>
3081    </attribute>
3082    <optional>
3083      <attribute name="macTableManager">
3084        <ref name="macTableManager"/>
3085      </attribute>
3086    </optional>
3087  </define>
3088
3089  <!--
3090      An interface description can either be of type bridge in which case
3091      it will use a bridging source, or of type ethernet which uses a device
3092      source and a device target instead. They both share a set of interface
3093      options. FIXME
3094    -->
3095  <define name="interface">
3096    <element name="interface">
3097      <choice>
3098        <group>
3099          <attribute name="type">
3100            <value>bridge</value>
3101          </attribute>
3102          <interleave>
3103            <optional>
3104              <element name="source">
3105                <ref name="interface-bridge-attributes"/>
3106                <optional>
3107                  <ref name="interface-network-attributes"/>
3108                </optional>
3109                <empty/>
3110              </element>
3111            </optional>
3112            <optional>
3113              <ref name="virtualPortProfile"/>
3114            </optional>
3115            <ref name="interface-options"/>
3116          </interleave>
3117        </group>
3118        <group>
3119          <attribute name="type">
3120            <value>ethernet</value>
3121          </attribute>
3122          <interleave>
3123            <optional>
3124              <element name="source">
3125                <ref name="interface-ip-info"/>
3126              </element>
3127            </optional>
3128            <ref name="interface-options"/>
3129          </interleave>
3130        </group>
3131        <group>
3132          <attribute name="type">
3133            <value>vhostuser</value>
3134          </attribute>
3135          <interleave>
3136            <ref name="unixSocketSource"/>
3137            <ref name="interface-options"/>
3138          </interleave>
3139        </group>
3140        <group>
3141          <attribute name="type">
3142            <value>network</value>
3143          </attribute>
3144          <interleave>
3145            <element name="source">
3146              <ref name="interface-network-attributes"/>
3147              <optional>
3148                <ref name="interface-bridge-attributes"/>
3149              </optional>
3150              <empty/>
3151            </element>
3152            <optional>
3153              <ref name="virtualPortProfile"/>
3154            </optional>
3155            <ref name="interface-options"/>
3156          </interleave>
3157        </group>
3158        <group>
3159          <attribute name="type">
3160            <value>direct</value>
3161          </attribute>
3162          <interleave>
3163            <element name="source">
3164              <attribute name="dev">
3165                <ref name="deviceName"/>
3166              </attribute>
3167              <optional>
3168                <attribute name="mode">
3169                  <ref name="bridgeMode"/>
3170                </attribute>
3171              </optional>
3172              <optional>
3173                <ref name="interface-network-attributes"/>
3174              </optional>
3175              <empty/>
3176            </element>
3177            <optional>
3178              <ref name="virtualPortProfile"/>
3179            </optional>
3180            <ref name="interface-options"/>
3181          </interleave>
3182        </group>
3183        <group>
3184          <attribute name="type">
3185            <value>user</value>
3186          </attribute>
3187          <interleave>
3188            <ref name="interface-options"/>
3189          </interleave>
3190        </group>
3191        <group>
3192          <attribute name="type">
3193            <value>internal</value>
3194          </attribute>
3195          <interleave>
3196            <element name="source">
3197              <attribute name="name">
3198                <ref name="deviceName"/>
3199              </attribute>
3200              <empty/>
3201            </element>
3202            <ref name="interface-options"/>
3203          </interleave>
3204        </group>
3205        <group>
3206          <attribute name="type">
3207            <choice>
3208              <value>mcast</value>
3209              <value>client</value>
3210            </choice>
3211          </attribute>
3212          <interleave>
3213            <element name="source">
3214              <attribute name="address">
3215                <ref name="ipv4Addr"/>
3216              </attribute>
3217              <attribute name="port">
3218                <ref name="PortNumber"/>
3219              </attribute>
3220              <empty/>
3221            </element>
3222            <ref name="interface-options"/>
3223          </interleave>
3224        </group>
3225        <group>
3226          <attribute name="type">
3227            <value>udp</value>
3228          </attribute>
3229          <interleave>
3230            <element name="source">
3231              <attribute name="address">
3232                <ref name="ipv4Addr"/>
3233              </attribute>
3234              <attribute name="port">
3235                <ref name="PortNumber"/>
3236              </attribute>
3237              <element name="local">
3238                <attribute name="address">
3239                  <ref name="ipv4Addr"/>
3240                </attribute>
3241                <attribute name="port">
3242                  <ref name="PortNumber"/>
3243                </attribute>
3244                <empty/>
3245              </element>
3246            </element>
3247            <ref name="interface-options"/>
3248          </interleave>
3249        </group>
3250        <group>
3251          <attribute name="type">
3252            <value>server</value>
3253          </attribute>
3254          <interleave>
3255            <element name="source">
3256              <optional>
3257                <attribute name="address">
3258                  <ref name="ipv4Addr"/>
3259                </attribute>
3260              </optional>
3261              <attribute name="port">
3262                <ref name="PortNumber"/>
3263              </attribute>
3264              <empty/>
3265            </element>
3266            <ref name="interface-options"/>
3267          </interleave>
3268        </group>
3269        <group>
3270          <attribute name="type">
3271            <value>hostdev</value>
3272          </attribute>
3273          <optional>
3274            <attribute name="managed">
3275              <ref name="virYesNo"/>
3276            </attribute>
3277          </optional>
3278          <interleave>
3279            <element name="source">
3280              <optional>
3281                <attribute name="missing">
3282                  <ref name="virYesNo"/>
3283                </attribute>
3284              </optional>
3285              <choice>
3286                <group>
3287                  <ref name="usbproduct"/>
3288                  <optional>
3289                    <ref name="usbaddress"/>
3290                  </optional>
3291                </group>
3292                <element name="address">
3293                  <choice>
3294                    <group>
3295                      <attribute name="type">
3296                        <value>pci</value>
3297                      </attribute>
3298                      <ref name="pciaddress"/>
3299                    </group>
3300                    <group>
3301                      <attribute name="type">
3302                        <value>usb</value>
3303                      </attribute>
3304                      <attribute name="bus">
3305                        <ref name="usbAddr"/>
3306                      </attribute>
3307                      <attribute name="device">
3308                        <ref name="usbAddr"/>
3309                      </attribute>
3310                    </group>
3311                  </choice>
3312                </element>
3313              </choice>
3314            </element>
3315            <optional>
3316              <ref name="virtualPortProfile"/>
3317            </optional>
3318            <ref name="interface-options"/>
3319          </interleave>
3320        </group>
3321
3322        <group>
3323          <attribute name="type">
3324            <value>vdpa</value>
3325          </attribute>
3326          <interleave>
3327            <element name="source">
3328              <attribute name="dev">
3329                <ref name="deviceName"/>
3330              </attribute>
3331            </element>
3332            <ref name="interface-options"/>
3333          </interleave>
3334        </group>
3335
3336      </choice>
3337      <optional>
3338        <attribute name="trustGuestRxFilters">
3339          <ref name="virYesNo"/>
3340        </attribute>
3341      </optional>
3342    </element>
3343  </define>
3344  <!--
3345      The interface options possible are:
3346        - the MAC address
3347        - the IP address bound to the interface
3348        - the name of the script used to set up the binding
3349        - the target device used
3350        - boot order
3351        - link state
3352    -->
3353  <define name="interface-options">
3354    <interleave>
3355      <optional>
3356        <element name="link">
3357          <attribute name="state">
3358            <choice>
3359              <value>up</value>
3360              <value>down</value>
3361            </choice>
3362          </attribute>
3363          <empty/>
3364        </element>
3365      </optional>
3366      <optional>
3367        <ref name="mtu"/>
3368      </optional>
3369      <optional>
3370        <ref name="coalesce"/>
3371      </optional>
3372      <optional>
3373        <element name="target">
3374          <attribute name="dev">
3375            <ref name="deviceName"/>
3376          </attribute>
3377          <optional>
3378            <attribute name="managed">
3379              <ref name="virYesNo"/>
3380            </attribute>
3381          </optional>
3382          <empty/>
3383        </element>
3384      </optional>
3385      <optional>
3386        <element name="guest">
3387          <interleave>
3388            <optional>
3389              <attribute name="dev">
3390                <ref name="deviceName"/>
3391              </attribute>
3392            </optional>
3393            <optional>
3394              <attribute name="actual">
3395                <ref name="deviceName"/>
3396              </attribute>
3397            </optional>
3398          </interleave>
3399          <empty/>
3400        </element>
3401      </optional>
3402      <optional>
3403        <element name="mac">
3404          <attribute name="address">
3405            <ref name="uniMacAddr"/>
3406          </attribute>
3407          <optional>
3408            <attribute name="type">
3409              <choice>
3410                <value>generated</value>
3411                <value>static</value>
3412              </choice>
3413            </attribute>
3414          </optional>
3415          <optional>
3416            <attribute name="check">
3417              <ref name="virYesNo"/>
3418            </attribute>
3419          </optional>
3420          <empty/>
3421        </element>
3422      </optional>
3423      <ref name="interface-ip-info"/>
3424      <optional>
3425        <element name="script">
3426          <attribute name="path">
3427            <ref name="filePath"/>
3428          </attribute>
3429          <empty/>
3430        </element>
3431      </optional>
3432      <optional>
3433        <element name="downscript">
3434          <attribute name="path">
3435            <ref name="filePath"/>
3436          </attribute>
3437          <empty/>
3438        </element>
3439      </optional>
3440      <optional>
3441        <element name="backenddomain">
3442          <attribute name="name">
3443            <ref name="objectNameWithSlash"/>
3444          </attribute>
3445          <empty/>
3446        </element>
3447      </optional>
3448      <optional>
3449        <element name="model">
3450          <attribute name="type">
3451            <data type="string">
3452              <param name="pattern">[a-zA-Z0-9\-_]+</param>
3453            </data>
3454          </attribute>
3455          <empty/>
3456        </element>
3457      </optional>
3458      <optional>
3459        <element name="backend">
3460          <optional>
3461            <attribute name="tap">
3462              <ref name="absFilePath"/>
3463            </attribute>
3464          </optional>
3465          <optional>
3466            <attribute name="vhost">
3467              <ref name="absFilePath"/>
3468            </attribute>
3469          </optional>
3470        </element>
3471      </optional>
3472      <optional>
3473        <element name="driver">
3474          <choice>
3475            <group>
3476              <attribute name="name">
3477                <choice>
3478                  <value>kvm</value>
3479                  <value>vfio</value>
3480                  <value>xen</value>
3481                </choice>
3482              </attribute>
3483            </group>
3484            <group>
3485              <optional>
3486                <attribute name="name">
3487                  <choice>
3488                    <value>qemu</value>
3489                    <value>vhost</value>
3490                  </choice>
3491                </attribute>
3492              </optional>
3493              <optional>
3494                <attribute name="queues">
3495                  <ref name="positiveInteger"/>
3496                </attribute>
3497              </optional>
3498              <optional>
3499                <attribute name="rx_queue_size">
3500                  <ref name="positiveInteger"/>
3501                </attribute>
3502              </optional>
3503              <optional>
3504                <attribute name="tx_queue_size">
3505                  <ref name="positiveInteger"/>
3506                </attribute>
3507              </optional>
3508              <optional>
3509                <attribute name="txmode">
3510                  <choice>
3511                    <value>iothread</value>
3512                    <value>timer</value>
3513                  </choice>
3514                </attribute>
3515              </optional>
3516              <optional>
3517                <ref name="ioeventfd"/>
3518              </optional>
3519              <optional>
3520                <ref name="event_idx"/>
3521              </optional>
3522            </group>
3523          </choice>
3524          <ref name="virtioOptions"/>
3525          <interleave>
3526            <optional>
3527              <element name="host">
3528                <optional>
3529                  <attribute name="csum">
3530                    <ref name="virOnOff"/>
3531                  </attribute>
3532                </optional>
3533                <optional>
3534                  <attribute name="gso">
3535                    <ref name="virOnOff"/>
3536                  </attribute>
3537                </optional>
3538                <optional>
3539                  <attribute name="tso4">
3540                    <ref name="virOnOff"/>
3541                  </attribute>
3542                </optional>
3543                <optional>
3544                  <attribute name="tso6">
3545                    <ref name="virOnOff"/>
3546                  </attribute>
3547                </optional>
3548                <optional>
3549                  <attribute name="ecn">
3550                    <ref name="virOnOff"/>
3551                  </attribute>
3552                </optional>
3553                <optional>
3554                  <attribute name="ufo">
3555                    <ref name="virOnOff"/>
3556                  </attribute>
3557                </optional>
3558                <optional>
3559                  <attribute name="mrg_rxbuf">
3560                    <ref name="virOnOff"/>
3561                  </attribute>
3562                </optional>
3563              </element>
3564            </optional>
3565            <optional>
3566              <element name="guest">
3567                <optional>
3568                  <attribute name="csum">
3569                    <ref name="virOnOff"/>
3570                  </attribute>
3571                </optional>
3572                <optional>
3573                  <attribute name="tso4">
3574                    <ref name="virOnOff"/>
3575                  </attribute>
3576                </optional>
3577                <optional>
3578                  <attribute name="tso6">
3579                    <ref name="virOnOff"/>
3580                  </attribute>
3581                </optional>
3582                <optional>
3583                  <attribute name="ecn">
3584                    <ref name="virOnOff"/>
3585                  </attribute>
3586                </optional>
3587                <optional>
3588                  <attribute name="ufo">
3589                    <ref name="virOnOff"/>
3590                  </attribute>
3591                </optional>
3592              </element>
3593            </optional>
3594          </interleave>
3595        </element>
3596      </optional>
3597      <optional>
3598        <ref name="alias"/>
3599      </optional>
3600      <optional>
3601        <ref name="acpi"/>
3602      </optional>
3603      <optional>
3604        <ref name="address"/>
3605      </optional>
3606      <optional>
3607        <element name="filterref">
3608          <ref name="filterref-node-attributes"/>
3609        </element>
3610      </optional>
3611      <optional>
3612        <element name="tune">
3613          <optional>
3614            <!-- size of send buffer for network tap devices -->
3615            <element name="sndbuf">
3616              <ref name="unsignedInt"/>
3617            </element>
3618          </optional>
3619        </element>
3620      </optional>
3621      <optional>
3622        <ref name="deviceBoot"/>
3623      </optional>
3624      <optional>
3625        <ref name="rom"/>
3626      </optional>
3627      <optional>
3628        <ref name="bandwidth"/>
3629      </optional>
3630      <optional>
3631        <ref name="vlan"/>
3632      </optional>
3633      <optional>
3634        <ref name="portOptions"/>
3635      </optional>
3636      <optional>
3637        <ref name="teaming"/>
3638      </optional>
3639    </interleave>
3640  </define>
3641
3642  <!--
3643      All ip-related info for either the host or guest side of an interface
3644  -->
3645  <define name="interface-ip-info">
3646    <zeroOrMore>
3647      <element name="ip">
3648        <attribute name="address">
3649          <ref name="ipAddr"/>
3650        </attribute>
3651        <optional>
3652          <attribute name="family">
3653            <ref name="addr-family"/>
3654          </attribute>
3655        </optional>
3656        <optional>
3657          <attribute name="prefix">
3658            <ref name="ipPrefix"/>
3659          </attribute>
3660        </optional>
3661        <optional>
3662          <attribute name="peer">
3663            <ref name="ipAddr"/>
3664          </attribute>
3665        </optional>
3666        <empty/>
3667      </element>
3668    </zeroOrMore>
3669    <zeroOrMore>
3670      <ref name="route"/>
3671    </zeroOrMore>
3672  </define>
3673
3674  <define name="teaming">
3675    <element name="teaming">
3676      <choice>
3677        <group>
3678          <attribute name="type">
3679            <value>persistent</value>
3680          </attribute>
3681        </group>
3682        <group>
3683          <attribute name="type">
3684            <value>transient</value>
3685          </attribute>
3686          <attribute name="persistent">
3687            <ref name="aliasName"/>
3688          </attribute>
3689        </group>
3690      </choice>
3691    </element>
3692  </define>
3693
3694  <!--
3695      An emulator description is just a path to the binary used for the task
3696    -->
3697  <define name="emulator">
3698    <element name="emulator">
3699      <ref name="absFilePath"/>
3700    </element>
3701  </define>
3702  <!--
3703      A graphic description (SPICE, VNC, SDL, ...)
3704    -->
3705  <define name="graphic">
3706    <element name="graphics">
3707      <choice>
3708        <group>
3709          <attribute name="type">
3710            <value>sdl</value>
3711          </attribute>
3712          <optional>
3713            <attribute name="display">
3714              <text/>
3715            </attribute>
3716          </optional>
3717          <optional>
3718            <attribute name="xauth">
3719              <text/>
3720            </attribute>
3721          </optional>
3722          <optional>
3723            <attribute name="fullscreen">
3724              <ref name="virYesNo"/>
3725            </attribute>
3726          </optional>
3727          <optional>
3728            <element name="gl">
3729              <attribute name="enable">
3730                <ref name="virYesNo"/>
3731              </attribute>
3732              <empty/>
3733            </element>
3734          </optional>
3735        </group>
3736        <group>
3737          <attribute name="type">
3738            <value>vnc</value>
3739          </attribute>
3740          <choice>
3741            <group>
3742              <optional>
3743                <attribute name="port">
3744                  <ref name="PortNumber"/>
3745                </attribute>
3746              </optional>
3747              <optional>
3748                <attribute name="autoport">
3749                  <ref name="virYesNo"/>
3750                </attribute>
3751              </optional>
3752              <optional>
3753                <attribute name="websocket">
3754                  <ref name="PortNumber"/>
3755                </attribute>
3756              </optional>
3757              <optional>
3758                <attribute name="listen">
3759                  <ref name="addrIPorName"/>
3760                </attribute>
3761              </optional>
3762              <optional>
3763                <attribute name="sharePolicy">
3764                  <choice>
3765                    <value>allow-exclusive</value>
3766                    <value>force-shared</value>
3767                    <value>ignore</value>
3768                  </choice>
3769                </attribute>
3770              </optional>
3771              <optional>
3772                <attribute name="powerControl">
3773                  <ref name="virYesNo"/>
3774                </attribute>
3775              </optional>
3776            </group>
3777            <group>
3778              <optional>
3779                <attribute name="socket">
3780                  <ref name="absFilePath"/>
3781                </attribute>
3782              </optional>
3783            </group>
3784          </choice>
3785          <optional>
3786            <attribute name="passwd">
3787              <text/>
3788            </attribute>
3789          </optional>
3790          <optional>
3791            <attribute name="keymap">
3792              <text/>
3793            </attribute>
3794          </optional>
3795          <optional>
3796            <attribute name="passwdValidTo">
3797              <data type="dateTime"/>
3798            </attribute>
3799          </optional>
3800          <optional>
3801            <attribute name="connected">
3802              <value>keep</value>
3803            </attribute>
3804          </optional>
3805          <interleave>
3806            <optional>
3807              <element name="audio">
3808                <attribute name="id">
3809                  <ref name="uint8"/>
3810                </attribute>
3811              </element>
3812            </optional>
3813            <ref name="listenElements"/>
3814          </interleave>
3815        </group>
3816        <group>
3817          <attribute name="type">
3818            <value>spice</value>
3819          </attribute>
3820          <optional>
3821            <attribute name="port">
3822              <ref name="PortNumber"/>
3823            </attribute>
3824          </optional>
3825          <optional>
3826            <attribute name="tlsPort">
3827              <ref name="PortNumber"/>
3828            </attribute>
3829          </optional>
3830          <optional>
3831            <attribute name="autoport">
3832              <ref name="virYesNo"/>
3833            </attribute>
3834          </optional>
3835          <optional>
3836            <attribute name="listen">
3837              <ref name="addrIPorName"/>
3838            </attribute>
3839          </optional>
3840          <optional>
3841            <attribute name="passwd">
3842              <text/>
3843            </attribute>
3844          </optional>
3845          <optional>
3846            <attribute name="keymap">
3847              <text/>
3848            </attribute>
3849          </optional>
3850          <optional>
3851            <attribute name="passwdValidTo">
3852              <data type="dateTime"/>
3853            </attribute>
3854          </optional>
3855          <optional>
3856            <attribute name="connected">
3857              <choice>
3858                <value>fail</value>
3859                <value>disconnect</value>
3860                <value>keep</value>
3861              </choice>
3862            </attribute>
3863          </optional>
3864          <optional>
3865            <attribute name="defaultMode">
3866              <choice>
3867                <value>any</value>
3868                <value>secure</value>
3869                <value>insecure</value>
3870              </choice>
3871            </attribute>
3872          </optional>
3873          <interleave>
3874            <ref name="listenElements"/>
3875            <zeroOrMore>
3876              <element name="channel">
3877                <attribute name="name">
3878                  <choice>
3879                    <value>main</value>
3880                    <value>display</value>
3881                    <value>inputs</value>
3882                    <value>cursor</value>
3883                    <value>playback</value>
3884                    <value>record</value>
3885                    <value>smartcard</value>
3886                    <value>usbredir</value>
3887                  </choice>
3888                </attribute>
3889                <attribute name="mode">
3890                  <choice>
3891                    <value>any</value>
3892                    <value>secure</value>
3893                    <value>insecure</value>
3894                  </choice>
3895                </attribute>
3896                <empty/>
3897              </element>
3898            </zeroOrMore>
3899            <optional>
3900              <element name="image">
3901                <attribute name="compression">
3902                  <choice>
3903                    <value>auto_glz</value>
3904                    <value>auto_lz</value>
3905                    <value>quic</value>
3906                    <value>glz</value>
3907                    <value>lz</value>
3908                    <value>off</value>
3909                  </choice>
3910                </attribute>
3911                <empty/>
3912              </element>
3913            </optional>
3914            <optional>
3915              <element name="jpeg">
3916                <attribute name="compression">
3917                  <choice>
3918                    <value>auto</value>
3919                    <value>never</value>
3920                    <value>always</value>
3921                  </choice>
3922                </attribute>
3923                <empty/>
3924              </element>
3925            </optional>
3926            <optional>
3927              <element name="zlib">
3928                <attribute name="compression">
3929                  <choice>
3930                    <value>auto</value>
3931                    <value>never</value>
3932                    <value>always</value>
3933                  </choice>
3934                </attribute>
3935                <empty/>
3936              </element>
3937            </optional>
3938            <optional>
3939              <element name="playback">
3940                <attribute name="compression">
3941                  <ref name="virOnOff"/>
3942                </attribute>
3943                <empty/>
3944              </element>
3945            </optional>
3946            <optional>
3947              <element name="streaming">
3948                <attribute name="mode">
3949                  <choice>
3950                    <value>filter</value>
3951                    <value>all</value>
3952                    <value>off</value>
3953                  </choice>
3954                </attribute>
3955                <empty/>
3956              </element>
3957            </optional>
3958            <optional>
3959              <element name="clipboard">
3960                <attribute name="copypaste">
3961                  <ref name="virYesNo"/>
3962                </attribute>
3963                <empty/>
3964              </element>
3965            </optional>
3966            <optional>
3967              <element name="mouse">
3968                <attribute name="mode">
3969                  <choice>
3970                    <value>server</value>
3971                    <value>client</value>
3972                  </choice>
3973                </attribute>
3974                <empty/>
3975              </element>
3976            </optional>
3977            <optional>
3978              <element name="filetransfer">
3979                <attribute name="enable">
3980                  <ref name="virYesNo"/>
3981                </attribute>
3982                <empty/>
3983              </element>
3984            </optional>
3985            <optional>
3986              <element name="gl">
3987                <attribute name="enable">
3988                  <ref name="virYesNo"/>
3989                </attribute>
3990                <optional>
3991                  <attribute name="rendernode">
3992                    <ref name="absFilePath"/>
3993                  </attribute>
3994                </optional>
3995                <empty/>
3996              </element>
3997            </optional>
3998          </interleave>
3999        </group>
4000        <group>
4001          <attribute name="type">
4002            <value>rdp</value>
4003          </attribute>
4004          <optional>
4005            <attribute name="port">
4006              <ref name="PortNumber"/>
4007            </attribute>
4008          </optional>
4009          <optional>
4010            <attribute name="autoport">
4011              <ref name="virYesNo"/>
4012            </attribute>
4013          </optional>
4014          <optional>
4015            <attribute name="replaceUser">
4016              <ref name="virYesNo"/>
4017            </attribute>
4018          </optional>
4019          <optional>
4020            <attribute name="multiUser">
4021              <ref name="virYesNo"/>
4022            </attribute>
4023          </optional>
4024          <optional>
4025            <attribute name="listen">
4026              <ref name="addrIPorName"/>
4027            </attribute>
4028          </optional>
4029          <ref name="listenElements"/>
4030        </group>
4031        <group>
4032          <attribute name="type">
4033            <value>desktop</value>
4034          </attribute>
4035          <optional>
4036            <attribute name="display">
4037              <text/>
4038            </attribute>
4039          </optional>
4040          <optional>
4041            <attribute name="fullscreen">
4042              <ref name="virYesNo"/>
4043            </attribute>
4044          </optional>
4045        </group>
4046        <group>
4047          <attribute name="type">
4048            <value>egl-headless</value>
4049          </attribute>
4050          <optional>
4051            <element name="gl">
4052              <optional>
4053                <attribute name="rendernode">
4054                  <ref name="absFilePath"/>
4055                </attribute>
4056              </optional>
4057            </element>
4058          </optional>
4059        </group>
4060      </choice>
4061    </element>
4062  </define>
4063
4064  <define name="listenElements">
4065    <zeroOrMore>
4066      <element name="listen">
4067        <choice>
4068          <group>
4069            <attribute name="type">
4070              <value>address</value>
4071            </attribute>
4072            <optional>
4073              <attribute name="address">
4074                <ref name="addrIPorName"/>
4075              </attribute>
4076            </optional>
4077          </group>
4078          <group>
4079            <attribute name="type">
4080              <value>network</value>
4081            </attribute>
4082            <attribute name="network">
4083              <text/>
4084            </attribute>
4085            <optional>
4086              <attribute name="address">
4087                <ref name="addrIPorName"/>
4088              </attribute>
4089            </optional>
4090          </group>
4091          <group>
4092            <attribute name="type">
4093              <value>socket</value>
4094            </attribute>
4095            <optional>
4096              <attribute name="socket">
4097                <ref name="absFilePath"/>
4098              </attribute>
4099            </optional>
4100          </group>
4101          <group>
4102            <attribute name="type">
4103              <value>none</value>
4104            </attribute>
4105          </group>
4106        </choice>
4107      </element>
4108    </zeroOrMore>
4109  </define>
4110  <!--
4111     A video adapter description, allowing configuration of device
4112     model, number of virtual heads, video ram size, and for qxl
4113     both ram bar sizes.
4114   -->
4115  <define name="video">
4116    <element name="video">
4117      <interleave>
4118        <optional>
4119          <element name="driver">
4120            <optional>
4121              <ref name="virtioOptions"/>
4122            </optional>
4123            <optional>
4124              <attribute name="name">
4125                <choice>
4126                  <value>qemu</value>
4127                  <value>vhostuser</value>
4128                </choice>
4129              </attribute>
4130            </optional>
4131            <optional>
4132              <attribute name="vgaconf">
4133                <choice>
4134                  <value>io</value>
4135                  <value>on</value>
4136                  <value>off</value>
4137                </choice>
4138              </attribute>
4139            </optional>
4140          </element>
4141        </optional>
4142        <optional>
4143          <element name="model">
4144            <choice>
4145              <attribute name="type">
4146                <choice>
4147                  <value>vga</value>
4148                  <value>cirrus</value>
4149                  <value>vmvga</value>
4150                  <value>xen</value>
4151                  <value>vbox</value>
4152                  <value>virtio</value>
4153                  <value>gop</value>
4154                  <value>none</value>
4155                  <value>bochs</value>
4156                  <value>ramfb</value>
4157                </choice>
4158              </attribute>
4159              <group>
4160                <attribute name="type">
4161                  <value>qxl</value>
4162                </attribute>
4163                <optional>
4164                  <attribute name="ram">
4165                    <ref name="unsignedInt"/>
4166                  </attribute>
4167                </optional>
4168                <optional>
4169                  <attribute name="vgamem">
4170                    <ref name="unsignedInt"/>
4171                  </attribute>
4172                </optional>
4173                <optional>
4174                  <attribute name="vram64">
4175                    <ref name="unsignedInt"/>
4176                  </attribute>
4177                </optional>
4178              </group>
4179            </choice>
4180            <optional>
4181              <attribute name="vram">
4182                <ref name="unsignedInt"/>
4183              </attribute>
4184            </optional>
4185            <optional>
4186              <attribute name="heads">
4187                <ref name="unsignedInt"/>
4188              </attribute>
4189            </optional>
4190            <optional>
4191              <attribute name="primary">
4192                <ref name="virYesNo"/>
4193              </attribute>
4194            </optional>
4195            <optional>
4196              <element name="acceleration">
4197                <optional>
4198                  <attribute name="accel3d">
4199                    <ref name="virYesNo"/>
4200                  </attribute>
4201                </optional>
4202                <optional>
4203                  <attribute name="accel2d">
4204                    <ref name="virYesNo"/>
4205                  </attribute>
4206                </optional>
4207                <optional>
4208                  <attribute name="rendernode">
4209                    <ref name="absFilePath"/>
4210                  </attribute>
4211                </optional>
4212              </element>
4213            </optional>
4214            <optional>
4215              <element name="resolution">
4216                <attribute name="x">
4217                  <ref name="unsignedInt"/>
4218                </attribute>
4219                <attribute name="y">
4220                  <ref name="unsignedInt"/>
4221                </attribute>
4222              </element>
4223            </optional>
4224          </element>
4225        </optional>
4226        <optional>
4227          <ref name="alias"/>
4228        </optional>
4229        <optional>
4230          <ref name="acpi"/>
4231        </optional>
4232        <optional>
4233          <ref name="address"/>
4234        </optional>
4235      </interleave>
4236    </element>
4237  </define>
4238  <!--
4239      When a certain event happens, multiple policies can be applied
4240      depends on what happened:
4241    -->
4242  <define name="events">
4243    <interleave>
4244      <optional>
4245        <element name="on_reboot">
4246          <ref name="offOptions"/>
4247        </element>
4248      </optional>
4249      <optional>
4250        <element name="on_poweroff">
4251          <ref name="offOptions"/>
4252        </element>
4253      </optional>
4254      <optional>
4255        <element name="on_crash">
4256          <ref name="crashOptions"/>
4257        </element>
4258      </optional>
4259      <optional>
4260        <element name="on_lockfailure">
4261          <ref name="lockfailureOptions"/>
4262        </element>
4263      </optional>
4264    </interleave>
4265  </define>
4266  <!--
4267      Options when a domain terminates:
4268      destroy: The domain is cleaned up
4269      restart: A new domain is started in place of the old one
4270      preserve: The domain will remain in memory until it is destroyed manually
4271      rename-restart: a variant of the previous one but where the old domain is
4272                      renamed before being saved to allow a restart
4273    -->
4274  <define name="offOptions">
4275    <choice>
4276      <value>destroy</value>
4277      <value>restart</value>
4278      <value>preserve</value>
4279      <value>rename-restart</value>
4280    </choice>
4281  </define>
4282  <!--
4283      Options when a domain crashes:
4284      destroy: The domain is cleaned up
4285      restart: A new domain is started in place of the old one
4286      preserve: The domain will remain in memory until it is destroyed manually
4287      rename-restart: a variant of the previous one but where the old domain is
4288                      renamed before being saved to allow a restart
4289      coredump-destroy: The crashed domain's core will be dumped, and then the
4290                        domain will be terminated completely and all resources
4291                        released
4292      coredump-restart: The crashed domain's core will be dumped, and then the
4293                        domain will be restarted with the same configuration
4294    -->
4295  <define name="crashOptions">
4296    <choice>
4297      <value>destroy</value>
4298      <value>restart</value>
4299      <value>preserve</value>
4300      <value>rename-restart</value>
4301      <value>coredump-destroy</value>
4302      <value>coredump-restart</value>
4303    </choice>
4304  </define>
4305  <!--
4306      Options when resource locks are lost:
4307      poweroff: power off the domain
4308      restart: power off the domain and start it up again to reacquire the
4309               locks
4310      pause: pause the execution of the domain so that it can be manually
4311             resumed when lock issues are solved
4312      ignore: keep the domain running
4313  -->
4314  <define name="lockfailureOptions">
4315    <choice>
4316      <value>poweroff</value>
4317      <value>restart</value>
4318      <value>pause</value>
4319      <value>ignore</value>
4320    </choice>
4321  </define>
4322  <!--
4323      Control ACPI sleep states (dis)allowed for the domain
4324      For each of the states the following rules apply:
4325      on: the state will be forcefully enabled
4326      off: the state will be forcefully disabled
4327      not specified: hypervisor will be left to decide its defaults
4328  -->
4329  <define name="pm">
4330    <element name="pm">
4331      <interleave>
4332        <optional>
4333          <element name="suspend-to-mem">
4334            <ref name="suspendChoices"/>
4335          </element>
4336        </optional>
4337        <optional>
4338          <element name="suspend-to-disk">
4339            <ref name="suspendChoices"/>
4340          </element>
4341        </optional>
4342      </interleave>
4343      <empty/>
4344    </element>
4345  </define>
4346  <define name="suspendChoices">
4347    <optional>
4348      <attribute name="enabled">
4349        <ref name="virYesNo"/>
4350      </attribute>
4351    </optional>
4352  </define>
4353  <!--
4354      Specific setup for a qemu emulated character device.  Note: this
4355      definition doesn't fully specify the constraints on this node.
4356    -->
4357  <define name="qemucdev">
4358    <ref name="qemucdevSrcType"/>
4359    <optional>
4360      <attribute name="tty">
4361        <ref name="absFilePath"/>
4362      </attribute>
4363    </optional>
4364    <interleave>
4365      <ref name="qemucdevSrcDef"/>
4366      <optional>
4367        <ref name="qemucdevTgtDef"/>
4368      </optional>
4369      <optional>
4370        <ref name="alias"/>
4371      </optional>
4372      <optional>
4373        <ref name="acpi"/>
4374      </optional>
4375      <optional>
4376        <ref name="address"/>
4377      </optional>
4378    </interleave>
4379  </define>
4380
4381  <define name="qemucdevConsoleTgtType">
4382    <attribute name="type">
4383      <choice>
4384        <value>xen</value>
4385        <value>serial</value>
4386        <value>uml</value> <!-- NOT USED ANYMORE -->
4387        <value>virtio</value>
4388        <value>lxc</value>
4389        <value>openvz</value>
4390        <value>sclp</value>
4391        <value>sclplm</value>
4392      </choice>
4393    </attribute>
4394  </define>
4395
4396  <define name="qemucdevSerialTgtType">
4397    <attribute name="type">
4398      <choice>
4399        <value>isa-serial</value>
4400        <value>usb-serial</value>
4401        <value>pci-serial</value>
4402        <value>spapr-vio-serial</value>
4403        <value>system-serial</value>
4404        <value>sclp-serial</value>
4405      </choice>
4406    </attribute>
4407  </define>
4408
4409  <define name="qemucdevSerialTgtModel">
4410    <element name="model">
4411      <attribute name="name">
4412        <choice>
4413          <value>isa-serial</value>
4414          <value>usb-serial</value>
4415          <value>pci-serial</value>
4416          <value>spapr-vty</value>
4417          <value>pl011</value>
4418          <value>16550a</value>
4419          <value>sclpconsole</value>
4420          <value>sclplmconsole</value>
4421        </choice>
4422      </attribute>
4423    </element>
4424  </define>
4425
4426  <define  name="qemucdevTgtDef">
4427    <element name="target">
4428      <interleave>
4429        <choice>
4430          <optional>
4431            <ref name="qemucdevConsoleTgtType"/>
4432          </optional>
4433          <optional>
4434            <ref name="qemucdevSerialTgtType"/>
4435          </optional>
4436        </choice>
4437        <optional>
4438          <attribute name="port"/>
4439        </optional>
4440        <optional>
4441          <ref name="qemucdevSerialTgtModel"/>
4442        </optional>
4443      </interleave>
4444    </element>
4445  </define>
4446
4447  <define name="qemucdevSrcTypeChoice">
4448    <choice>
4449      <value>dev</value>
4450      <value>file</value>
4451      <value>pipe</value>
4452      <value>unix</value>
4453      <value>tcp</value>
4454      <value>udp</value>
4455      <value>null</value>
4456      <value>stdio</value>
4457      <value>vc</value>
4458      <value>pty</value>
4459      <value>spicevmc</value>
4460      <value>spiceport</value>
4461      <value>nmdm</value>
4462    </choice>
4463  </define>
4464
4465  <define name="usbdevfilter">
4466    <element name="usbdev">
4467      <attribute name="allow">
4468        <ref name="virYesNo"/>
4469      </attribute>
4470      <optional>
4471        <attribute name="class">
4472          <choice>
4473            <ref name="usbClass"/>
4474            <ref name="usbIdDefault"/>
4475          </choice>
4476        </attribute>
4477      </optional>
4478      <optional>
4479        <attribute name="vendor">
4480          <choice>
4481            <ref name="usbId"/>
4482            <ref name="usbIdDefault"/>
4483          </choice>
4484        </attribute>
4485      </optional>
4486      <optional>
4487        <attribute name="product">
4488          <choice>
4489            <ref name="usbId"/>
4490            <ref name="usbIdDefault"/>
4491          </choice>
4492        </attribute>
4493      </optional>
4494      <optional>
4495        <attribute name="version">
4496          <choice>
4497            <ref name="usbVersion"/>
4498            <ref name="usbIdDefault"/>
4499          </choice>
4500        </attribute>
4501      </optional>
4502    </element>
4503  </define>
4504
4505  <define name="qemucdevSrcType">
4506    <attribute name="type">
4507      <ref name="qemucdevSrcTypeChoice"/>
4508    </attribute>
4509  </define>
4510  <define name="qemucdevSrcDef">
4511    <zeroOrMore>
4512      <element name="source">
4513        <optional>
4514          <attribute name="mode"/>
4515        </optional>
4516        <optional>
4517          <attribute name="path"/>
4518        </optional>
4519        <optional>
4520          <attribute name="host"/>
4521        </optional>
4522        <optional>
4523          <attribute name="service"/>
4524        </optional>
4525        <optional>
4526          <attribute name="channel"/>
4527        </optional>
4528        <optional>
4529          <attribute name="master"/>
4530        </optional>
4531        <optional>
4532          <attribute name="slave"/>
4533        </optional>
4534        <optional>
4535          <attribute name="append">
4536            <ref name="virOnOff"/>
4537          </attribute>
4538        </optional>
4539        <optional>
4540          <attribute name="tls">
4541            <ref name="virYesNo"/>
4542          </attribute>
4543        </optional>
4544        <optional>
4545          <ref name="reconnect"/>
4546        </optional>
4547        <zeroOrMore>
4548          <ref name="devSeclabel"/>
4549        </zeroOrMore>
4550      </element>
4551    </zeroOrMore>
4552    <optional>
4553      <element name="protocol">
4554        <optional>
4555          <attribute name="type">
4556            <choice>
4557              <value>raw</value>
4558              <value>telnet</value>
4559              <value>telnets</value>
4560              <value>tls</value>
4561            </choice>
4562          </attribute>
4563        </optional>
4564      </element>
4565    </optional>
4566    <optional>
4567      <element name="log">
4568        <attribute name="file">
4569          <ref name="absFilePath"/>
4570        </attribute>
4571        <optional>
4572          <attribute name="append">
4573            <ref name="virOnOff"/>
4574          </attribute>
4575        </optional>
4576      </element>
4577    </optional>
4578  </define>
4579  <!--
4580      The description for a console
4581      just a tty device
4582    -->
4583  <define name="console">
4584    <element name="console">
4585      <choice>
4586        <group>
4587          <optional>
4588            <attribute name="tty">
4589              <ref name="absFilePath"/>
4590            </attribute>
4591          </optional>
4592          <empty/>
4593        </group>
4594        <ref name="qemucdev"/>
4595      </choice>
4596    </element>
4597  </define>
4598  <define name="codec">
4599    <element name="codec">
4600      <attribute name="type">
4601        <choice>
4602          <value>duplex</value>
4603          <value>micro</value>
4604          <value>output</value>
4605        </choice>
4606      </attribute>
4607    </element>
4608  </define>
4609  <define name="sound">
4610    <element name="sound">
4611      <attribute name="model">
4612        <choice>
4613          <value>sb16</value>
4614          <value>es1370</value>
4615          <value>pcspk</value>
4616          <value>ac97</value>
4617          <value>ich6</value>
4618          <value>ich7</value>
4619          <value>ich9</value>
4620          <value>usb</value>
4621        </choice>
4622      </attribute>
4623      <interleave>
4624        <optional>
4625          <ref name="alias"/>
4626        </optional>
4627        <optional>
4628          <ref name="acpi"/>
4629        </optional>
4630        <optional>
4631          <ref name="address"/>
4632        </optional>
4633        <optional>
4634          <element name="audio">
4635            <attribute name="id">
4636              <ref name="uint8"/>
4637            </attribute>
4638          </element>
4639        </optional>
4640        <zeroOrMore>
4641          <ref name="codec"/>
4642        </zeroOrMore>
4643      </interleave>
4644    </element>
4645  </define>
4646
4647  <define name="audiocommonattr">
4648    <optional>
4649      <attribute name="mixingEngine">
4650        <ref name="virYesNo"/>
4651      </attribute>
4652    </optional>
4653    <optional>
4654      <attribute name="fixedSettings">
4655        <ref name="virYesNo"/>
4656      </attribute>
4657    </optional>
4658    <optional>
4659      <attribute name="voices">
4660        <ref name="uint32"/>
4661      </attribute>
4662    </optional>
4663    <optional>
4664      <attribute name="bufferLength">
4665        <ref name="uint32"/>
4666      </attribute>
4667    </optional>
4668  </define>
4669
4670  <define name="audiocommonchild">
4671    <optional>
4672      <element name="settings">
4673        <optional>
4674          <attribute name="frequency">
4675            <ref name="uint32"/>
4676          </attribute>
4677        </optional>
4678        <optional>
4679          <attribute name="channels">
4680            <ref name="uint32"/>
4681          </attribute>
4682        </optional>
4683        <optional>
4684          <attribute name="format">
4685            <choice>
4686              <value>s8</value>
4687              <value>u8</value>
4688              <value>s16</value>
4689              <value>u16</value>
4690              <value>s32</value>
4691              <value>u32</value>
4692              <value>f32</value>
4693            </choice>
4694          </attribute>
4695        </optional>
4696      </element>
4697    </optional>
4698  </define>
4699
4700  <define name="audionone">
4701    <ref name="audiocommonattr"/>
4702    <ref name="audiocommonchild"/>
4703  </define>
4704
4705  <define name="audioalsa">
4706    <ref name="audiocommonattr"/>
4707    <optional>
4708      <attribute name="dev">
4709        <ref name="filePath"/>
4710      </attribute>
4711    </optional>
4712    <ref name="audiocommonchild"/>
4713  </define>
4714
4715  <define name="audiocoreaudio">
4716    <ref name="audiocommonattr"/>
4717    <optional>
4718      <attribute name="bufferCount">
4719        <ref name="uint32"/>
4720      </attribute>
4721    </optional>
4722    <ref name="audiocommonchild"/>
4723  </define>
4724
4725  <define name="audiojack">
4726    <ref name="audiocommonattr"/>
4727    <optional>
4728      <attribute name="serverName">
4729        <data type="string"/>
4730      </attribute>
4731    </optional>
4732    <optional>
4733      <attribute name="clientName">
4734        <data type="string"/>
4735      </attribute>
4736    </optional>
4737    <optional>
4738      <attribute name="connectPorts">
4739        <data type="string"/>
4740      </attribute>
4741    </optional>
4742    <optional>
4743      <attribute name="exactName">
4744        <ref name="virYesNo"/>
4745      </attribute>
4746    </optional>
4747    <ref name="audiocommonchild"/>
4748  </define>
4749
4750  <define name="audiooss">
4751    <ref name="audiocommonattr"/>
4752    <optional>
4753      <attribute name="dev">
4754        <ref name="deviceName"/>
4755      </attribute>
4756    </optional>
4757    <optional>
4758      <attribute name="bufferCount">
4759        <ref name="uint32"/>
4760      </attribute>
4761    </optional>
4762    <optional>
4763      <attribute name="tryPoll">
4764        <ref name="virYesNo"/>
4765      </attribute>
4766    </optional>
4767    <ref name="audiocommonchild"/>
4768  </define>
4769
4770  <define name="audiopulseaudio">
4771    <ref name="audiocommonattr"/>
4772    <optional>
4773      <attribute name="name">
4774        <data type="string"/>
4775      </attribute>
4776    </optional>
4777    <optional>
4778      <attribute name="streamName">
4779        <data type="string"/>
4780      </attribute>
4781    </optional>
4782    <optional>
4783      <attribute name="latency">
4784        <ref name="uint32"/>
4785      </attribute>
4786    </optional>
4787    <ref name="audiocommonchild"/>
4788  </define>
4789
4790  <define name="audiosdl">
4791    <ref name="audiocommonattr"/>
4792    <optional>
4793      <attribute name="bufferCount">
4794        <ref name="uint32"/>
4795      </attribute>
4796    </optional>
4797    <ref name="audiocommonchild"/>
4798  </define>
4799
4800  <define name="audiospice">
4801    <ref name="audiocommonattr"/>
4802    <ref name="audiocommonchild"/>
4803  </define>
4804
4805  <define name="audiofile">
4806    <ref name="audiocommonattr"/>
4807    <ref name="audiocommonchild"/>
4808  </define>
4809
4810  <define name="audio">
4811    <element name="audio">
4812      <attribute name="id">
4813        <ref name="uint8"/>
4814      </attribute>
4815      <optional>
4816        <attribute name="timerPeriod">
4817          <ref name="uint32"/>
4818        </attribute>
4819      </optional>
4820      <choice>
4821        <group>
4822          <attribute name="type">
4823            <value>none</value>
4824          </attribute>
4825          <interleave>
4826            <optional>
4827              <element name="input">
4828                <ref name="audionone"/>
4829              </element>
4830            </optional>
4831            <optional>
4832              <element name="output">
4833                <ref name="audionone"/>
4834              </element>
4835            </optional>
4836          </interleave>
4837        </group>
4838        <group>
4839          <attribute name="type">
4840            <value>alsa</value>
4841          </attribute>
4842          <interleave>
4843            <optional>
4844              <element name="input">
4845                <ref name="audioalsa"/>
4846              </element>
4847            </optional>
4848            <optional>
4849              <element name="output">
4850                <ref name="audioalsa"/>
4851              </element>
4852            </optional>
4853          </interleave>
4854        </group>
4855        <group>
4856          <attribute name="type">
4857            <value>coreaudio</value>
4858          </attribute>
4859          <interleave>
4860            <optional>
4861              <element name="input">
4862                <ref name="audiocoreaudio"/>
4863              </element>
4864            </optional>
4865            <optional>
4866              <element name="output">
4867                <ref name="audiocoreaudio"/>
4868              </element>
4869            </optional>
4870          </interleave>
4871        </group>
4872        <group>
4873          <attribute name="type">
4874            <value>jack</value>
4875          </attribute>
4876          <interleave>
4877            <optional>
4878              <element name="input">
4879                <ref name="audiojack"/>
4880              </element>
4881            </optional>
4882            <optional>
4883              <element name="output">
4884                <ref name="audiojack"/>
4885              </element>
4886            </optional>
4887          </interleave>
4888        </group>
4889        <group>
4890          <attribute name="type">
4891            <choice>
4892              <value>oss</value>
4893            </choice>
4894          </attribute>
4895          <optional>
4896            <attribute name="tryMMap">
4897              <ref name="virYesNo"/>
4898            </attribute>
4899          </optional>
4900          <optional>
4901            <attribute name="exclusive">
4902              <ref name="virYesNo"/>
4903            </attribute>
4904          </optional>
4905          <optional>
4906            <attribute name="dspPolicy">
4907              <data type="int"/>
4908            </attribute>
4909          </optional>
4910          <interleave>
4911            <optional>
4912              <element name="input">
4913                <ref name="audiooss"/>
4914              </element>
4915            </optional>
4916            <optional>
4917              <element name="output">
4918                <ref name="audiooss"/>
4919              </element>
4920            </optional>
4921          </interleave>
4922        </group>
4923        <group>
4924          <attribute name="type">
4925            <value>pulseaudio</value>
4926          </attribute>
4927          <optional>
4928            <attribute name="serverName">
4929              <data type="string"/>
4930            </attribute>
4931          </optional>
4932          <interleave>
4933            <optional>
4934              <element name="input">
4935                <ref name="audiopulseaudio"/>
4936              </element>
4937            </optional>
4938            <optional>
4939              <element name="output">
4940                <ref name="audiopulseaudio"/>
4941              </element>
4942            </optional>
4943          </interleave>
4944        </group>
4945        <group>
4946          <attribute name="type">
4947            <value>sdl</value>
4948          </attribute>
4949          <optional>
4950            <attribute name="driver">
4951              <choice>
4952                <value>esd</value>
4953                <value>alsa</value>
4954                <value>arts</value>
4955                <value>pulseaudio</value>
4956              </choice>
4957            </attribute>
4958          </optional>
4959          <interleave>
4960            <optional>
4961              <element name="input">
4962                <ref name="audiosdl"/>
4963              </element>
4964            </optional>
4965            <optional>
4966              <element name="output">
4967                <ref name="audiosdl"/>
4968              </element>
4969            </optional>
4970          </interleave>
4971        </group>
4972        <group>
4973          <attribute name="type">
4974            <value>spice</value>
4975          </attribute>
4976          <interleave>
4977            <optional>
4978              <element name="input">
4979                <ref name="audiospice"/>
4980              </element>
4981            </optional>
4982            <optional>
4983              <element name="output">
4984                <ref name="audiospice"/>
4985              </element>
4986            </optional>
4987          </interleave>
4988        </group>
4989        <group>
4990          <attribute name="type">
4991            <value>file</value>
4992          </attribute>
4993          <optional>
4994            <attribute name="path">
4995              <ref name="filePath"/>
4996            </attribute>
4997          </optional>
4998          <interleave>
4999            <optional>
5000              <element name="input">
5001                <ref name="audiofile"/>
5002              </element>
5003            </optional>
5004            <optional>
5005              <element name="output">
5006                <ref name="audiofile"/>
5007              </element>
5008            </optional>
5009          </interleave>
5010        </group>
5011      </choice>
5012    </element>
5013  </define>
5014  <define name="watchdog">
5015    <element name="watchdog">
5016      <attribute name="model">
5017        <choice>
5018          <value>i6300esb</value>
5019          <value>ib700</value>
5020          <value>diag288</value>
5021        </choice>
5022      </attribute>
5023      <optional>
5024        <attribute name="action">
5025          <choice>
5026            <value>reset</value>
5027            <value>shutdown</value>
5028            <value>poweroff</value>
5029            <value>pause</value>
5030            <value>none</value>
5031            <value>dump</value>
5032            <value>inject-nmi</value>
5033          </choice>
5034        </attribute>
5035      </optional>
5036      <optional>
5037        <ref name="alias"/>
5038      </optional>
5039      <optional>
5040        <ref name="acpi"/>
5041      </optional>
5042      <optional>
5043        <ref name="address"/>
5044      </optional>
5045    </element>
5046  </define>
5047  <define name="nvram">
5048    <element name="nvram">
5049      <optional>
5050        <ref name="address"/>
5051      </optional>
5052    </element>
5053  </define>
5054
5055  <define name="shmem">
5056    <element name="shmem">
5057      <attribute name="name">
5058        <data type="string">
5059          <param name="pattern">[^/]*</param>
5060        </data>
5061      </attribute>
5062      <optional>
5063        <attribute name="role">
5064          <choice>
5065            <value>master</value>
5066            <value>peer</value>
5067          </choice>
5068        </attribute>
5069      </optional>
5070      <interleave>
5071        <optional>
5072          <element name="model">
5073            <attribute name="type">
5074              <choice>
5075                <value>ivshmem</value>
5076                <value>ivshmem-plain</value>
5077                <value>ivshmem-doorbell</value>
5078              </choice>
5079            </attribute>
5080          </element>
5081        </optional>
5082        <optional>
5083          <element name="size">
5084            <ref name="scaledInteger"/>
5085          </element>
5086        </optional>
5087        <optional>
5088          <element name="server">
5089            <optional>
5090              <attribute name="path">
5091                <ref name="absFilePath"/>
5092              </attribute>
5093            </optional>
5094          </element>
5095        </optional>
5096        <optional>
5097          <element name="msi">
5098            <optional>
5099              <ref name="ioeventfd"/>
5100            </optional>
5101            <optional>
5102              <attribute name="vectors">
5103                <ref name="unsignedInt"/>
5104              </attribute>
5105            </optional>
5106          </element>
5107        </optional>
5108        <optional>
5109          <ref name="alias"/>
5110        </optional>
5111        <optional>
5112          <ref name="acpi"/>
5113        </optional>
5114        <optional>
5115          <ref name="address"/>
5116        </optional>
5117      </interleave>
5118    </element>
5119  </define>
5120
5121  <define name="memballoon">
5122    <element name="memballoon">
5123      <attribute name="model">
5124        <choice>
5125          <value>virtio</value>
5126          <value>virtio-transitional</value>
5127          <value>virtio-non-transitional</value>
5128          <value>xen</value>
5129          <value>none</value>
5130        </choice>
5131      </attribute>
5132      <optional>
5133        <attribute name="autodeflate">
5134          <ref name="virOnOff"/>
5135        </attribute>
5136      </optional>
5137      <optional>
5138         <attribute name="freePageReporting">
5139           <ref name="virOnOff"/>
5140         </attribute>
5141       </optional>
5142      <interleave>
5143        <optional>
5144          <ref name="alias"/>
5145        </optional>
5146        <optional>
5147          <ref name="acpi"/>
5148        </optional>
5149        <optional>
5150          <ref name="address"/>
5151        </optional>
5152        <optional>
5153          <element name="stats">
5154            <attribute name="period">
5155              <ref name="positiveInteger"/>
5156            </attribute>
5157          </element>
5158        </optional>
5159        <optional>
5160          <element name="driver">
5161            <ref name="virtioOptions"/>
5162          </element>
5163        </optional>
5164      </interleave>
5165    </element>
5166  </define>
5167  <define name="parallel">
5168    <element name="parallel">
5169      <ref name="qemucdev"/>
5170    </element>
5171  </define>
5172  <define name="serial">
5173    <element name="serial">
5174      <ref name="qemucdev"/>
5175    </element>
5176  </define>
5177  <define name="guestfwdTarget">
5178    <element name="target">
5179      <attribute name="type">
5180        <value>guestfwd</value>
5181      </attribute>
5182      <attribute name="address"/>
5183      <attribute name="port"/>
5184    </element>
5185  </define>
5186  <define name="virtioTarget">
5187    <element name="target">
5188      <attribute name="type">
5189        <value>virtio</value>
5190      </attribute>
5191      <optional>
5192        <attribute name="name"/>
5193      </optional>
5194      <optional>
5195        <attribute name="state">
5196          <choice>
5197            <value>connected</value>
5198            <value>disconnected</value>
5199          </choice>
5200        </attribute>
5201      </optional>
5202    </element>
5203  </define>
5204  <define name="xenTarget">
5205    <element name="target">
5206      <attribute name="type">
5207        <value>xen</value>
5208      </attribute>
5209      <optional>
5210        <attribute name="name"/>
5211      </optional>
5212    </element>
5213  </define>
5214  <define name="channel">
5215    <element name="channel">
5216      <ref name="qemucdevSrcType"/>
5217      <interleave>
5218        <ref name="qemucdevSrcDef"/>
5219        <choice>
5220          <ref name="guestfwdTarget"/>
5221          <ref name="virtioTarget"/>
5222          <ref name="xenTarget"/>
5223        </choice>
5224        <optional>
5225          <ref name="alias"/>
5226        </optional>
5227        <optional>
5228          <ref name="acpi"/>
5229        </optional>
5230        <optional>
5231          <ref name="address"/>
5232        </optional>
5233      </interleave>
5234    </element>
5235  </define>
5236  <define name="smartcard">
5237    <element name="smartcard">
5238      <choice>
5239        <group>
5240          <attribute name="mode">
5241            <value>host</value>
5242          </attribute>
5243          <!-- might need to add optional database element here later -->
5244        </group>
5245        <group>
5246          <attribute name="mode">
5247            <value>host-certificates</value>
5248          </attribute>
5249          <ref name="certificate"/>
5250          <ref name="certificate"/>
5251          <ref name="certificate"/>
5252          <optional>
5253            <element name="database">
5254              <ref name="absDirPath"/>
5255            </element>
5256          </optional>
5257        </group>
5258        <group>
5259          <attribute name="mode">
5260            <value>passthrough</value>
5261          </attribute>
5262          <ref name="qemucdevSrcType"/>
5263          <interleave>
5264            <ref name="qemucdevSrcDef"/>
5265            <optional>
5266              <ref name="qemucdevTgtDef"/>
5267            </optional>
5268          </interleave>
5269        </group>
5270      </choice>
5271      <optional>
5272        <ref name="alias"/>
5273      </optional>
5274      <optional>
5275        <ref name="acpi"/>
5276      </optional>
5277      <optional>
5278        <ref name="address"/>
5279      </optional>
5280    </element>
5281  </define>
5282  <define name="certificate">
5283    <element name="certificate">
5284      <text/>
5285    </element>
5286  </define>
5287
5288  <define name="tpm">
5289    <element name="tpm">
5290      <optional>
5291        <attribute name="model">
5292          <choice>
5293            <value>tpm-tis</value>
5294            <value>tpm-crb</value>
5295            <value>tpm-spapr</value>
5296            <value>spapr-tpm-proxy</value>
5297          </choice>
5298        </attribute>
5299      </optional>
5300      <ref name="tpm-backend"/>
5301      <optional>
5302        <ref name="alias"/>
5303      </optional>
5304      <optional>
5305        <ref name="acpi"/>
5306      </optional>
5307      <optional>
5308        <ref name="address"/>
5309      </optional>
5310    </element>
5311  </define>
5312
5313  <define name="tpm-backend">
5314    <element name="backend">
5315      <choice>
5316        <group>
5317          <attribute name="type">
5318            <value>passthrough</value>
5319          </attribute>
5320          <ref name="tpm-passthrough-device"/>
5321        </group>
5322        <group>
5323          <attribute name="type">
5324             <value>emulator</value>
5325          </attribute>
5326          <ref name="tpm-backend-emulator-encryption"/>
5327          <ref name="tpm-backend-emulator-active-pcr-banks"/>
5328          <optional>
5329            <attribute name="persistent_state">
5330              <choice>
5331                <value>yes</value>
5332                <value>no</value>
5333              </choice>
5334           </attribute>
5335          </optional>
5336        </group>
5337      </choice>
5338      <optional>
5339        <attribute name="version">
5340          <choice>
5341            <value>1.2</value>
5342            <value>2.0</value>
5343          </choice>
5344       </attribute>
5345      </optional>
5346    </element>
5347  </define>
5348
5349  <define name="tpm-passthrough-device">
5350    <optional>
5351      <element name="device">
5352        <optional>
5353          <attribute name="path">
5354            <ref name="filePath"/>
5355          </attribute>
5356        </optional>
5357      </element>
5358    </optional>
5359  </define>
5360
5361  <define name="tpm-backend-emulator-encryption">
5362    <optional>
5363      <element name="encryption">
5364        <attribute name="secret">
5365          <ref name="UUID"/>
5366        </attribute>
5367      </element>
5368    </optional>
5369  </define>
5370
5371  <define name="tpm-backend-emulator-active-pcr-banks">
5372    <optional>
5373      <element name="active_pcr_banks">
5374        <interleave>
5375          <optional>
5376            <element name="sha1">
5377              <empty/>
5378            </element>
5379          </optional>
5380          <optional>
5381            <element name="sha256">
5382              <empty/>
5383            </element>
5384          </optional>
5385          <optional>
5386            <element name="sha384">
5387              <empty/>
5388            </element>
5389          </optional>
5390          <optional>
5391            <element name="sha512">
5392              <empty/>
5393            </element>
5394          </optional>
5395        </interleave>
5396      </element>
5397    </optional>
5398  </define>
5399
5400  <define name="vsock">
5401    <element name="vsock">
5402      <optional>
5403        <attribute name="model">
5404          <choice>
5405            <value>virtio</value>
5406            <value>virtio-transitional</value>
5407            <value>virtio-non-transitional</value>
5408          </choice>
5409        </attribute>
5410      </optional>
5411      <interleave>
5412        <optional>
5413          <element name="cid">
5414            <optional>
5415              <attribute name="auto">
5416                <ref name="virYesNo"/>
5417              </attribute>
5418            </optional>
5419            <optional>
5420              <attribute name="address">
5421                <ref name="unsignedInt"/>
5422              </attribute>
5423            </optional>
5424          </element>
5425        </optional>
5426        <optional>
5427          <ref name="address"/>
5428        </optional>
5429        <optional>
5430          <ref name="alias"/>
5431        </optional>
5432        <optional>
5433          <ref name="acpi"/>
5434        </optional>
5435        <optional>
5436          <element name="driver">
5437            <ref name="virtioOptions"/>
5438          </element>
5439        </optional>
5440      </interleave>
5441    </element>
5442  </define>
5443  <define name="iommu">
5444    <element name="iommu">
5445      <attribute name="model">
5446        <choice>
5447          <value>intel</value>
5448          <value>smmuv3</value>
5449        </choice>
5450      </attribute>
5451      <optional>
5452        <element name="driver">
5453          <optional>
5454            <attribute name="intremap">
5455              <ref name="virOnOff"/>
5456            </attribute>
5457          </optional>
5458          <optional>
5459            <attribute name="caching_mode">
5460              <ref name="virOnOff"/>
5461            </attribute>
5462          </optional>
5463          <optional>
5464            <attribute name="eim">
5465              <ref name="virOnOff"/>
5466            </attribute>
5467          </optional>
5468          <optional>
5469            <attribute name="iotlb">
5470              <ref name="virOnOff"/>
5471            </attribute>
5472          </optional>
5473          <optional>
5474            <attribute name="aw_bits">
5475              <ref name="uint8"/>
5476            </attribute>
5477          </optional>
5478        </element>
5479      </optional>
5480    </element>
5481  </define>
5482
5483  <define name="input">
5484    <element name="input">
5485      <interleave>
5486        <optional>
5487          <element name="driver">
5488            <ref name="virtioOptions"/>
5489          </element>
5490        </optional>
5491        <choice>
5492          <group>
5493            <attribute name="type">
5494              <choice>
5495                <value>tablet</value>
5496                <value>mouse</value>
5497                <value>keyboard</value>
5498              </choice>
5499            </attribute>
5500            <optional>
5501              <attribute name="bus">
5502                <choice>
5503                  <value>ps2</value>
5504                  <value>usb</value>
5505                  <value>xen</value>
5506                  <value>virtio</value>
5507                </choice>
5508              </attribute>
5509            </optional>
5510          </group>
5511          <group>
5512            <attribute name="type">
5513              <value>passthrough</value>
5514            </attribute>
5515            <attribute name="bus">
5516              <value>virtio</value>
5517            </attribute>
5518            <element name="source">
5519              <attribute name="evdev">
5520                <ref name="absFilePath"/>
5521              </attribute>
5522            </element>
5523          </group>
5524          <group>
5525            <attribute name="type">
5526              <value>evdev</value>
5527            </attribute>
5528            <element name="source">
5529              <attribute name="dev">
5530                <ref name="absFilePath"/>
5531              </attribute>
5532              <optional>
5533                <attribute name="grab">
5534                  <value>all</value>
5535                </attribute>
5536              </optional>
5537              <optional>
5538                <attribute name="grabToggle">
5539                  <choice>
5540                    <value>ctrl-ctrl</value>
5541                    <value>alt-alt</value>
5542                    <value>shift-shift</value>
5543                    <value>meta-meta</value>
5544                    <value>scrolllock</value>
5545                    <value>ctrl-scrolllock</value>
5546                  </choice>
5547                </attribute>
5548              </optional>
5549              <optional>
5550                <attribute name="repeat">
5551                  <ref name="virOnOff"/>
5552                </attribute>
5553              </optional>
5554            </element>
5555          </group>
5556        </choice>
5557        <optional>
5558          <attribute name="model">
5559            <choice>
5560              <value>virtio</value>
5561              <value>virtio-transitional</value>
5562              <value>virtio-non-transitional</value>
5563            </choice>
5564          </attribute>
5565        </optional>
5566        <optional>
5567          <ref name="alias"/>
5568        </optional>
5569        <optional>
5570          <ref name="acpi"/>
5571        </optional>
5572        <optional>
5573          <ref name="address"/>
5574        </optional>
5575      </interleave>
5576    </element>
5577  </define>
5578  <define name="hub">
5579    <element name="hub">
5580      <attribute name="type">
5581        <value>usb</value>
5582      </attribute>
5583      <interleave>
5584        <optional>
5585          <ref name="alias"/>
5586        </optional>
5587        <optional>
5588          <ref name="acpi"/>
5589        </optional>
5590        <optional>
5591          <ref name="address"/>
5592        </optional>
5593      </interleave>
5594    </element>
5595  </define>
5596  <define name="redirdev">
5597    <element name="redirdev">
5598      <attribute name="bus">
5599        <value>usb</value>
5600      </attribute>
5601      <attribute name="type">
5602        <ref name="qemucdevSrcTypeChoice"/>
5603      </attribute>
5604      <interleave>
5605        <ref name="qemucdevSrcDef"/>
5606        <optional>
5607          <ref name="alias"/>
5608        </optional>
5609        <optional>
5610          <ref name="acpi"/>
5611        </optional>
5612        <optional>
5613          <ref name="address"/>
5614        </optional>
5615        <optional>
5616          <ref name="deviceBoot"/>
5617        </optional>
5618      </interleave>
5619    </element>
5620  </define>
5621  <define name="redirfilter">
5622    <element name="redirfilter">
5623      <zeroOrMore>
5624        <ref name="usbdevfilter"/>
5625      </zeroOrMore>
5626    </element>
5627  </define>
5628
5629  <define name="hostdev">
5630    <element name="hostdev">
5631      <interleave>
5632        <choice>
5633          <group>
5634            <ref name="hostdevsubsys"/>
5635          </group>
5636          <group>
5637            <ref name="hostdevcaps"/>
5638          </group>
5639        </choice>
5640        <optional>
5641          <ref name="alias"/>
5642        </optional>
5643        <optional>
5644          <ref name="acpi"/>
5645        </optional>
5646        <optional>
5647          <ref name="deviceBoot"/>
5648        </optional>
5649        <optional>
5650          <ref name="rom"/>
5651        </optional>
5652        <optional>
5653          <ref name="address"/>
5654        </optional>
5655        <optional>
5656          <element name="readonly">
5657            <empty/>
5658          </element>
5659        </optional>
5660        <optional>
5661          <element name="shareable">
5662            <empty/>
5663          </element>
5664        </optional>
5665      </interleave>
5666    </element>
5667  </define>
5668
5669  <define name="hostdevsubsys">
5670    <optional>
5671      <attribute name="mode">
5672        <value>subsystem</value>
5673      </attribute>
5674    </optional>
5675    <optional>
5676      <attribute name="managed">
5677        <ref name="virYesNo"/>
5678      </attribute>
5679    </optional>
5680    <choice>
5681      <ref name="hostdevsubsyspci"/>
5682      <ref name="hostdevsubsysusb"/>
5683      <ref name="hostdevsubsysscsi"/>
5684      <ref name="hostdevsubsyshost"/>
5685      <ref name="hostdevsubsysmdev"/>
5686    </choice>
5687  </define>
5688
5689  <define name="hostdevcaps">
5690    <attribute name="mode">
5691      <value>capabilities</value>
5692    </attribute>
5693    <choice>
5694      <group>
5695        <ref name="hostdevcapsstorage"/>
5696      </group>
5697      <group>
5698        <ref name="hostdevcapsmisc"/>
5699      </group>
5700      <group>
5701        <ref name="hostdevcapsnet"/>
5702      </group>
5703    </choice>
5704  </define>
5705
5706
5707  <define name="hostdevsubsyspci">
5708    <attribute name="type">
5709      <value>pci</value>
5710    </attribute>
5711    <interleave>
5712      <optional>
5713        <element name="driver">
5714          <attribute name="name">
5715            <choice>
5716              <value>kvm</value>
5717              <value>vfio</value>
5718              <value>xen</value>
5719            </choice>
5720          </attribute>
5721          <empty/>
5722        </element>
5723      </optional>
5724      <optional>
5725        <ref name="teaming"/>
5726      </optional>
5727      <element name="source">
5728        <optional>
5729          <ref name="startupPolicy"/>
5730        </optional>
5731        <optional>
5732          <attribute name="writeFiltering">
5733            <ref name="virYesNo"/>
5734          </attribute>
5735        </optional>
5736        <element name="address">
5737          <ref name="pciaddress"/>
5738        </element>
5739      </element>
5740    </interleave>
5741  </define>
5742
5743  <define name="hostdevsubsysusb">
5744    <attribute name="type">
5745      <value>usb</value>
5746    </attribute>
5747    <element name="source">
5748      <optional>
5749        <ref name="startupPolicy"/>
5750      </optional>
5751      <choice>
5752        <group>
5753          <ref name="usbproduct"/>
5754          <optional>
5755            <ref name="usbaddress"/>
5756          </optional>
5757        </group>
5758        <ref name="usbaddress"/>
5759      </choice>
5760    </element>
5761  </define>
5762
5763  <define name="hostdevsubsysscsi">
5764    <attribute name="type">
5765      <value>scsi</value>
5766    </attribute>
5767    <optional>
5768      <ref name="sgIO"/>
5769    </optional>
5770    <optional>
5771      <ref name="rawIO"/>
5772    </optional>
5773    <element name="source">
5774      <choice>
5775        <group>  <!-- scsi_host adapter -->
5776          <optional>
5777            <attribute name="protocol">
5778              <value>adapter</value>   <!-- scsi_host, default, optional -->
5779            </attribute>
5780          </optional>
5781          <interleave>
5782            <ref name="sourceinfoadapter"/>
5783            <element name="address">
5784              <ref name="scsiaddress"/>
5785            </element>
5786          </interleave>
5787        </group>
5788        <group>  <!-- iscsi adapter -->
5789          <attribute name="protocol">
5790            <value>iscsi</value>     <!-- iscsi, required -->
5791          </attribute>
5792          <attribute name="name">
5793            <text/>
5794          </attribute>
5795          <interleave>
5796            <oneOrMore>
5797              <element name="host">
5798                <attribute name="name">
5799                  <text/>
5800                </attribute>
5801                <optional>
5802                  <attribute name="port">
5803                    <ref name="PortNumber"/>
5804                  </attribute>
5805                </optional>
5806                <empty/>
5807              </element>
5808            </oneOrMore>
5809            <optional>
5810              <ref name="diskAuth"/>
5811            </optional>
5812            <optional>
5813              <ref name="initiatorinfo"/>
5814            </optional>
5815          </interleave>
5816        </group>
5817      </choice>
5818    </element>
5819  </define>
5820
5821  <define name="hostdevsubsyshost">
5822    <attribute name="type">
5823      <value>scsi_host</value>
5824    </attribute>
5825    <optional>
5826      <attribute name="model">
5827        <choice>
5828          <value>virtio</value>
5829          <value>virtio-transitional</value>
5830          <value>virtio-non-transitional</value>
5831        </choice>
5832      </attribute>
5833    </optional>
5834    <element name="source">
5835      <choice>
5836        <group>
5837          <attribute name="protocol">
5838            <value>vhost</value>     <!-- vhost, required -->
5839          </attribute>
5840          <attribute name="wwpn">
5841            <data type="string">
5842              <param name="pattern">(naa\.)[0-9a-fA-F]{16}</param>
5843            </data>
5844          </attribute>
5845        </group>
5846      </choice>
5847    </element>
5848  </define>
5849
5850  <define name="hostdevsubsysmdev">
5851    <attribute name="type">
5852      <value>mdev</value>
5853    </attribute>
5854    <attribute name="model">
5855      <choice>
5856        <value>vfio-pci</value>
5857        <value>vfio-ccw</value>
5858        <value>vfio-ap</value>
5859      </choice>
5860    </attribute>
5861    <optional>
5862      <attribute name="ramfb">
5863        <ref name="virOnOff"/>
5864      </attribute>
5865    </optional>
5866    <optional>
5867      <attribute name="display">
5868        <ref name="virOnOff"/>
5869      </attribute>
5870    </optional>
5871    <element name="source">
5872      <ref name="mdevaddress"/>
5873    </element>
5874  </define>
5875
5876  <define name="hostdevcapsstorage">
5877    <attribute name="type">
5878      <value>storage</value>
5879    </attribute>
5880    <element name="source">
5881      <element name="block">
5882        <ref name="absFilePath"/>
5883      </element>
5884    </element>
5885  </define>
5886
5887  <define name="hostdevcapsmisc">
5888    <attribute name="type">
5889      <value>misc</value>
5890    </attribute>
5891    <element name="source">
5892      <element name="char">
5893        <ref name="absFilePath"/>
5894      </element>
5895    </element>
5896  </define>
5897
5898  <define name="hostdevcapsnet">
5899    <attribute name="type">
5900      <value>net</value>
5901    </attribute>
5902    <interleave>
5903      <element name="source">
5904        <element name="interface">
5905          <ref name="deviceName"/>
5906        </element>
5907      </element>
5908      <ref name="interface-ip-info"/>
5909    </interleave>
5910  </define>
5911
5912  <define name="usbproduct">
5913    <element name="vendor">
5914      <attribute name="id">
5915        <ref name="usbId"/>
5916      </attribute>
5917    </element>
5918    <element name="product">
5919      <attribute name="id">
5920        <ref name="usbId"/>
5921      </attribute>
5922    </element>
5923  </define>
5924  <define name="usbaddress">
5925    <element name="address">
5926      <attribute name="bus">
5927        <ref name="usbAddr"/>
5928      </attribute>
5929      <attribute name="device">
5930        <ref name="usbAddr"/>
5931      </attribute>
5932    </element>
5933  </define>
5934  <define name="scsiaddress">
5935    <attribute name="bus">
5936      <ref name="driveBus"/>
5937    </attribute>
5938    <attribute name="target">
5939      <ref name="driveSCSITarget"/>
5940    </attribute>
5941    <attribute name="unit">
5942      <ref name="driveSCSIUnit"/>
5943    </attribute>
5944  </define>
5945  <define name="usbportaddress">
5946    <attribute name="bus">
5947      <ref name="usbAddr"/>
5948    </attribute>
5949    <optional>
5950      <attribute name="port">
5951        <ref name="usbPort"/>
5952      </attribute>
5953    </optional>
5954  </define>
5955  <define name="spaprvioaddress">
5956    <optional>
5957      <attribute name="reg">
5958        <ref name="spaprvioReg"/>
5959      </attribute>
5960    </optional>
5961  </define>
5962  <define name="ccwaddress">
5963    <optional>
5964      <attribute name="cssid">
5965        <ref name="ccwCssidRange"/>
5966      </attribute>
5967      <attribute name="ssid">
5968        <ref name="ccwSsidRange"/>
5969      </attribute>
5970      <attribute name="devno">
5971        <ref name="ccwDevnoRange"/>
5972      </attribute>
5973    </optional>
5974  </define>
5975  <define name="driveaddress">
5976    <optional>
5977      <attribute name="controller">
5978        <ref name="driveController"/>
5979      </attribute>
5980    </optional>
5981    <optional>
5982      <attribute name="bus">
5983        <ref name="driveBus"/>
5984      </attribute>
5985    </optional>
5986    <optional>
5987      <attribute name="target">
5988        <ref name="driveTarget"/>
5989      </attribute>
5990    </optional>
5991    <optional>
5992      <attribute name="unit">
5993        <ref name="driveUnit"/>
5994      </attribute>
5995    </optional>
5996  </define>
5997  <define name="virtioserialaddress">
5998    <attribute name="controller">
5999      <ref name="driveController"/>
6000    </attribute>
6001    <optional>
6002      <attribute name="bus">
6003        <ref name="driveBus"/>
6004      </attribute>
6005    </optional>
6006    <optional>
6007      <attribute name="port">
6008        <ref name="virtioserialPort"/>
6009      </attribute>
6010    </optional>
6011  </define>
6012  <define name="ccidaddress">
6013    <attribute name="controller">
6014      <ref name="driveController"/>
6015    </attribute>
6016    <optional>
6017      <attribute name="slot">
6018        <ref name="ccidSlot"/>
6019      </attribute>
6020    </optional>
6021  </define>
6022  <define name="dimmaddress">
6023    <optional>
6024      <attribute name="slot">
6025        <ref name="unsignedInt"/>
6026      </attribute>
6027    </optional>
6028    <optional>
6029      <attribute name="base">
6030        <ref name="hexuint"/>
6031      </attribute>
6032    </optional>
6033  </define>
6034  <define name="mdevaddress">
6035    <element name="address">
6036      <attribute name="uuid">
6037        <ref name="UUID"/>
6038      </attribute>
6039    </element>
6040  </define>
6041  <define name="devices">
6042    <element name="devices">
6043      <interleave>
6044        <optional>
6045          <ref name="emulator"/>
6046        </optional>
6047        <zeroOrMore>
6048          <choice>
6049            <ref name="disk"/>
6050            <ref name="controller"/>
6051            <ref name="lease"/>
6052            <ref name="filesystem"/>
6053            <ref name="interface"/>
6054            <ref name="input"/>
6055            <ref name="sound"/>
6056            <ref name="audio"/>
6057            <ref name="hostdev"/>
6058            <ref name="graphic"/>
6059            <ref name="video"/>
6060            <ref name="console"/>
6061            <ref name="parallel"/>
6062            <ref name="serial"/>
6063            <ref name="channel"/>
6064            <ref name="smartcard"/>
6065            <ref name="hub"/>
6066            <ref name="redirdev"/>
6067            <ref name="redirfilter"/>
6068            <ref name="rng"/>
6069            <ref name="tpm"/>
6070            <ref name="shmem"/>
6071            <ref name="memorydev"/>
6072          </choice>
6073        </zeroOrMore>
6074        <optional>
6075          <ref name="watchdog"/>
6076        </optional>
6077        <optional>
6078          <ref name="memballoon"/>
6079        </optional>
6080        <optional>
6081          <ref name="nvram"/>
6082        </optional>
6083        <zeroOrMore>
6084          <ref name="panic"/>
6085        </zeroOrMore>
6086        <optional>
6087          <ref name="iommu"/>
6088        </optional>
6089        <optional>
6090          <ref name="vsock"/>
6091        </optional>
6092      </interleave>
6093    </element>
6094  </define>
6095  <!--
6096      A set of optional features: PAE, APIC, ACPI, GIC,
6097      HyperV Enlightenment, KVM features, paravirtual spinlocks and HAP support
6098    -->
6099  <define name="features">
6100    <optional>
6101      <element name="features">
6102        <interleave>
6103          <optional>
6104            <element name="pae">
6105              <empty/>
6106            </element>
6107          </optional>
6108          <optional>
6109            <element name="apic">
6110              <optional>
6111                <attribute name="eoi">
6112                  <ref name="virOnOff"/>
6113                </attribute>
6114              </optional>
6115            </element>
6116          </optional>
6117          <optional>
6118            <element name="acpi">
6119              <empty/>
6120            </element>
6121          </optional>
6122          <optional>
6123            <element name="hap">
6124              <optional>
6125                <attribute name="state">
6126                  <ref name="virOnOff"/>
6127                </attribute>
6128              </optional>
6129            </element>
6130          </optional>
6131          <optional>
6132            <ref name="hyperv"/>
6133          </optional>
6134          <optional>
6135            <element name="viridian">
6136              <empty/>
6137            </element>
6138          </optional>
6139          <optional>
6140            <ref name="kvm"/>
6141          </optional>
6142          <optional>
6143            <ref name="xen"/>
6144          </optional>
6145          <optional>
6146            <element name="privnet">
6147              <empty/>
6148            </element>
6149          </optional>
6150          <optional>
6151            <element name="pvspinlock">
6152              <optional>
6153                <ref name="featurestate"/>
6154              </optional>
6155              <empty/>
6156            </element>
6157          </optional>
6158          <optional>
6159            <ref name="capabilities"/>
6160          </optional>
6161          <optional>
6162            <ref name="pmu"/>
6163          </optional>
6164          <optional>
6165            <element name="vmport">
6166              <optional>
6167                <attribute name="state">
6168                  <ref name="virOnOff"/>
6169                </attribute>
6170              </optional>
6171            </element>
6172          </optional>
6173          <optional>
6174            <element name="gic">
6175              <optional>
6176                <attribute name="version">
6177                  <choice>
6178                    <value>host</value>
6179                    <value>2</value>
6180                    <value>3</value>
6181                  </choice>
6182                </attribute>
6183              </optional>
6184            </element>
6185          </optional>
6186          <optional>
6187            <element name="smm">
6188              <optional>
6189                <attribute name="state">
6190                  <ref name="virOnOff"/>
6191                </attribute>
6192                <optional>
6193                  <element name="tseg">
6194                    <ref name="scaledInteger"/>
6195                  </element>
6196                </optional>
6197              </optional>
6198            </element>
6199          </optional>
6200          <optional>
6201            <ref name="ioapic"/>
6202          </optional>
6203          <optional>
6204            <ref name="hpt"/>
6205          </optional>
6206          <optional>
6207            <ref name="vmcoreinfo"/>
6208          </optional>
6209          <optional>
6210            <element name="htm">
6211              <ref name="featurestate"/>
6212            </element>
6213          </optional>
6214          <optional>
6215            <element name="nested-hv">
6216              <ref name="featurestate"/>
6217            </element>
6218          </optional>
6219          <optional>
6220            <ref name="msrs"/>
6221          </optional>
6222          <optional>
6223            <element name="ccf-assist">
6224              <ref name="featurestate"/>
6225            </element>
6226          </optional>
6227          <optional>
6228            <ref name="cfpc"/>
6229          </optional>
6230          <optional>
6231            <ref name="sbbc"/>
6232          </optional>
6233          <optional>
6234            <ref name="ibs"/>
6235          </optional>
6236        </interleave>
6237      </element>
6238    </optional>
6239  </define>
6240
6241  <!--
6242      System information specification:
6243       Placeholder for system specific information likes the ones
6244       contained in the SMBIOS area.
6245       Only a limited subset of entries can be modified there, so we
6246       fully enumerate each case here.
6247       The DMTF spec doesn't specify any string subset, just 0 terminated
6248       byte strings, but better be safe and restrict at least the names
6249       to avoid problems with space normalization in attribute values,
6250       the value is kept as the element body for maximum flexibility.
6251       A priori we allow only type 0 and type 1 string updates
6252      -->
6253  <define name="sysinfo">
6254    <element name="sysinfo">
6255      <choice>
6256        <group>
6257          <attribute name="type">
6258            <value>smbios</value>
6259          </attribute>
6260          <interleave>
6261            <optional>
6262              <element name="bios">
6263                <oneOrMore>
6264                  <element name="entry">
6265                    <attribute name="name">
6266                      <ref name="sysinfo-bios-name"/>
6267                    </attribute>
6268                    <ref name="sysinfo-value"/>
6269                  </element>
6270                </oneOrMore>
6271              </element>
6272            </optional>
6273            <optional>
6274              <element name="system">
6275                <oneOrMore>
6276                  <element name="entry">
6277                    <attribute name="name">
6278                      <ref name="sysinfo-system-name"/>
6279                    </attribute>
6280                    <ref name="sysinfo-value"/>
6281                  </element>
6282                </oneOrMore>
6283              </element>
6284            </optional>
6285            <zeroOrMore>
6286              <element name="baseBoard">
6287                <oneOrMore>
6288                  <element name="entry">
6289                    <attribute name="name">
6290                      <ref name="sysinfo-baseBoard-name"/>
6291                    </attribute>
6292                    <ref name="sysinfo-value"/>
6293                  </element>
6294                </oneOrMore>
6295              </element>
6296            </zeroOrMore>
6297            <optional>
6298              <element name="chassis">
6299                <oneOrMore>
6300                  <element name="entry">
6301                    <attribute name="name">
6302                      <ref name="sysinfo-chassis-name"/>
6303                    </attribute>
6304                    <ref name="sysinfo-value"/>
6305                  </element>
6306                </oneOrMore>
6307              </element>
6308            </optional>
6309            <optional>
6310              <element name="oemStrings">
6311                <oneOrMore>
6312                  <element name="entry">
6313                    <ref name="sysinfo-value"/>
6314                  </element>
6315                </oneOrMore>
6316              </element>
6317            </optional>
6318          </interleave>
6319        </group>
6320        <group>
6321          <attribute name="type">
6322            <value>fwcfg</value>
6323          </attribute>
6324          <zeroOrMore>
6325            <element name="entry">
6326              <attribute name="name">
6327                <data type="string"/>
6328              </attribute>
6329              <choice>
6330                <group>
6331                  <attribute name="file">
6332                    <data type="string"/>
6333                  </attribute>
6334                  <empty/>
6335                </group>
6336                <group>
6337                  <ref name="sysinfo-value"/>
6338                </group>
6339              </choice>
6340            </element>
6341          </zeroOrMore>
6342        </group>
6343      </choice>
6344    </element>
6345  </define>
6346
6347  <define name="sysinfo-bios-name">
6348    <choice>
6349      <value>vendor</value>
6350      <value>version</value>
6351      <value>date</value>
6352      <value>release</value>
6353    </choice>
6354  </define>
6355
6356  <define name="sysinfo-system-name">
6357    <choice>
6358      <value>manufacturer</value>
6359      <value>product</value>
6360      <value>version</value>
6361      <value>serial</value>
6362      <value>uuid</value>
6363      <value>sku</value>
6364      <value>family</value>
6365    </choice>
6366  </define>
6367
6368  <define name="sysinfo-baseBoard-name">
6369    <choice>
6370      <value>manufacturer</value>
6371      <value>product</value>
6372      <value>version</value>
6373      <value>serial</value>
6374      <value>asset</value>
6375      <value>location</value>
6376    </choice>
6377  </define>
6378
6379  <define name="sysinfo-chassis-name">
6380    <choice>
6381      <value>manufacturer</value>
6382      <value>version</value>
6383      <value>serial</value>
6384      <value>asset</value>
6385      <value>sku</value>
6386    </choice>
6387  </define>
6388
6389  <define name="sysinfo-value">
6390    <data type="string"/>
6391  </define>
6392
6393  <define name="acpiTable">
6394    <element name="acpi">
6395      <zeroOrMore>
6396        <element name="table">
6397          <attribute name="type">
6398            <value>slic</value>
6399          </attribute>
6400          <ref name="absFilePath"/>
6401        </element>
6402      </zeroOrMore>
6403    </element>
6404  </define>
6405
6406  <define name="smbios">
6407    <element name="smbios">
6408      <attribute name="mode">
6409        <choice>
6410          <value>emulate</value>
6411          <value>host</value>
6412          <value>sysinfo</value>
6413        </choice>
6414      </attribute>
6415      <empty/>
6416    </element>
6417  </define>
6418
6419  <define name="bios">
6420    <element name="bios">
6421      <optional>
6422        <attribute name="useserial">
6423          <ref name="virYesNo"/>
6424        </attribute>
6425      </optional>
6426      <optional>
6427        <attribute name="rebootTimeout">
6428          <ref name="rebootTimeoutDelay"/>
6429        </attribute>
6430      </optional>
6431    </element>
6432  </define>
6433
6434  <define name="ioapic">
6435    <element name="ioapic">
6436      <attribute name="driver">
6437        <choice>
6438          <value>qemu</value>
6439          <value>kvm</value>
6440        </choice>
6441      </attribute>
6442      <empty/>
6443    </element>
6444  </define>
6445
6446  <define name="hpt">
6447    <element name="hpt">
6448      <optional>
6449        <attribute name="resizing">
6450          <choice>
6451            <value>enabled</value>
6452            <value>disabled</value>
6453            <value>required</value>
6454          </choice>
6455        </attribute>
6456      </optional>
6457      <optional>
6458        <element name="maxpagesize">
6459          <ref name="scaledInteger"/>
6460        </element>
6461      </optional>
6462    </element>
6463  </define>
6464
6465  <define name="vmcoreinfo">
6466    <element name="vmcoreinfo">
6467      <optional>
6468        <attribute name="state">
6469          <ref name="virOnOff"/>
6470        </attribute>
6471      </optional>
6472    </element>
6473  </define>
6474
6475  <define name="msrs">
6476    <element name="msrs">
6477      <attribute name="unknown">
6478        <choice>
6479          <value>ignore</value>
6480          <value>fault</value>
6481        </choice>
6482      </attribute>
6483    </element>
6484  </define>
6485
6486  <define name="cfpc">
6487    <element name="cfpc">
6488      <attribute name="value">
6489        <choice>
6490          <value>broken</value>
6491          <value>workaround</value>
6492          <value>fixed</value>
6493        </choice>
6494      </attribute>
6495    </element>
6496  </define>
6497
6498  <define name="sbbc">
6499    <element name="sbbc">
6500      <attribute name="value">
6501        <choice>
6502          <value>broken</value>
6503          <value>workaround</value>
6504          <value>fixed</value>
6505        </choice>
6506      </attribute>
6507    </element>
6508  </define>
6509
6510  <define name="ibs">
6511    <element name="ibs">
6512      <attribute name="value">
6513        <choice>
6514          <value>broken</value>
6515          <value>workaround</value>
6516          <value>fixed-ibs</value>
6517          <value>fixed-ccd</value>
6518          <value>fixed-na</value>
6519        </choice>
6520      </attribute>
6521    </element>
6522  </define>
6523
6524  <define name="address">
6525    <element name="address">
6526      <choice>
6527        <group>
6528          <attribute name="type">
6529            <value>pci</value>
6530          </attribute>
6531          <ref name="pciaddress"/>
6532          <ref name="zpciaddress"/>
6533        </group>
6534        <group>
6535          <attribute name="type">
6536            <value>drive</value>
6537          </attribute>
6538          <ref name="driveaddress"/>
6539        </group>
6540        <group>
6541          <attribute name="type">
6542            <value>virtio-serial</value>
6543          </attribute>
6544          <ref name="virtioserialaddress"/>
6545        </group>
6546        <group>
6547          <attribute name="type">
6548            <value>ccid</value>
6549          </attribute>
6550          <ref name="ccidaddress"/>
6551        </group>
6552        <group>
6553          <attribute name="type">
6554            <value>usb</value>
6555          </attribute>
6556          <ref name="usbportaddress"/>
6557        </group>
6558        <group>
6559          <attribute name="type">
6560            <value>spapr-vio</value>
6561          </attribute>
6562          <ref name="spaprvioaddress"/>
6563        </group>
6564        <group>
6565          <attribute name="type">
6566            <value>ccw</value>
6567          </attribute>
6568          <ref name="ccwaddress"/>
6569        </group>
6570        <group>
6571          <attribute name="type">
6572            <value>isa</value>
6573          </attribute>
6574          <ref name="isaaddress"/>
6575        </group>
6576        <group>
6577          <attribute name="type">
6578            <value>virtio-mmio</value>
6579          </attribute>
6580        </group>
6581        <group>
6582          <attribute name="type">
6583            <value>dimm</value>
6584          </attribute>
6585          <ref name="dimmaddress"/>
6586        </group>
6587        <group>
6588          <attribute name="type">
6589            <value>unassigned</value>
6590          </attribute>
6591        </group>
6592      </choice>
6593    </element>
6594  </define>
6595
6596  <define name="rom">
6597    <element name="rom">
6598      <optional>
6599        <attribute name="enabled">
6600          <ref name="virYesNo"/>
6601        </attribute>
6602      </optional>
6603      <optional>
6604        <attribute name="bar">
6605          <ref name="virOnOff"/>
6606        </attribute>
6607      </optional>
6608      <optional>
6609        <attribute name="file">
6610          <ref name="absFilePath"/>
6611        </attribute>
6612      </optional>
6613      <empty/>
6614    </element>
6615  </define>
6616
6617  <define name="acpi">
6618    <element name="acpi">
6619      <optional>
6620        <attribute name="index">
6621          <ref name="unsignedInt"/>
6622        </attribute>
6623      </optional>
6624    </element>
6625  </define>
6626
6627  <define name="memorydev">
6628    <element name="memory">
6629      <attribute name="model">
6630        <choice>
6631          <value>dimm</value>
6632          <value>nvdimm</value>
6633          <value>virtio-pmem</value>
6634          <value>virtio-mem</value>
6635        </choice>
6636      </attribute>
6637      <optional>
6638        <attribute name="access">
6639          <choice>
6640            <value>shared</value>
6641            <value>private</value>
6642          </choice>
6643        </attribute>
6644      </optional>
6645      <optional>
6646        <attribute name="discard">
6647          <ref name="virYesNo"/>
6648        </attribute>
6649      </optional>
6650      <interleave>
6651        <optional>
6652          <element name="uuid">
6653            <ref name="UUID"/>
6654          </element>
6655        </optional>
6656        <optional>
6657          <ref name="memorydev-source"/>
6658        </optional>
6659        <ref name="memorydev-target"/>
6660        <optional>
6661          <ref name="address"/>
6662        </optional>
6663        <optional>
6664          <ref name="alias"/>
6665        </optional>
6666        <optional>
6667          <ref name="acpi"/>
6668        </optional>
6669      </interleave>
6670    </element>
6671  </define>
6672
6673  <define name="memorydev-source">
6674    <element name="source">
6675      <choice>
6676        <group>
6677          <interleave>
6678            <optional>
6679              <element name="pagesize">
6680                <ref name="scaledInteger"/>
6681              </element>
6682            </optional>
6683            <optional>
6684              <element name="nodemask">
6685                <ref name="cpuset"/>
6686              </element>
6687            </optional>
6688          </interleave>
6689        </group>
6690        <group>
6691          <interleave>
6692            <element name="path">
6693              <ref name="absFilePath"/>
6694            </element>
6695            <optional>
6696              <element name="alignsize">
6697                <ref name="scaledInteger"/>
6698              </element>
6699            </optional>
6700            <optional>
6701              <element name="pmem">
6702                <empty/>
6703              </element>
6704            </optional>
6705          </interleave>
6706        </group>
6707      </choice>
6708    </element>
6709  </define>
6710
6711  <define name="memorydev-target">
6712    <element name="target">
6713      <interleave>
6714        <element name="size">
6715          <ref name="scaledInteger"/>
6716        </element>
6717        <optional>
6718          <element name="node">
6719            <ref name="unsignedInt"/>
6720          </element>
6721        </optional>
6722        <optional>
6723          <element name="block">
6724            <ref name="scaledInteger"/>
6725          </element>
6726        </optional>
6727        <optional>
6728          <element name="requested">
6729            <ref name="scaledInteger"/>
6730          </element>
6731        </optional>
6732        <optional>
6733          <element name="current">
6734            <ref name="scaledInteger"/>
6735          </element>
6736        </optional>
6737        <optional>
6738          <element name="label">
6739            <element name="size">
6740              <ref name="scaledInteger"/>
6741            </element>
6742          </element>
6743        </optional>
6744        <optional>
6745          <element name="readonly">
6746            <empty/>
6747          </element>
6748        </optional>
6749      </interleave>
6750    </element>
6751  </define>
6752
6753  <define name="rng">
6754    <element name="rng">
6755      <attribute name="model">
6756        <choice>
6757          <value>virtio</value>
6758          <value>virtio-transitional</value>
6759          <value>virtio-non-transitional</value>
6760        </choice>
6761      </attribute>
6762      <interleave>
6763        <ref name="rng-backend"/>
6764        <optional>
6765          <element name="driver">
6766            <ref name="virtioOptions"/>
6767          </element>
6768        </optional>
6769        <optional>
6770          <ref name="rng-rate"/>
6771        </optional>
6772        <optional>
6773          <ref name="alias"/>
6774        </optional>
6775        <optional>
6776          <ref name="acpi"/>
6777        </optional>
6778        <optional>
6779          <ref name="address"/>
6780        </optional>
6781      </interleave>
6782    </element>
6783  </define>
6784
6785  <define name="rng-backend">
6786    <element name="backend">
6787      <choice>
6788        <group>
6789          <attribute name="model">
6790            <value>random</value>
6791          </attribute>
6792          <choice>
6793            <ref name="absFilePath"/>
6794            <empty/>
6795          </choice>
6796        </group>
6797        <group>
6798          <attribute name="model">
6799            <value>egd</value>
6800          </attribute>
6801          <ref name="qemucdevSrcType"/>
6802          <ref name="qemucdevSrcDef"/>
6803        </group>
6804        <group>
6805          <attribute name="model">
6806            <value>builtin</value>
6807          </attribute>
6808          <empty/>
6809        </group>
6810      </choice>
6811    </element>
6812  </define>
6813
6814  <define name="rng-rate">
6815    <element name="rate">
6816      <attribute name="bytes">
6817        <ref name="positiveInteger"/>
6818      </attribute>
6819      <optional>
6820        <attribute name="period">
6821          <ref name="positiveInteger"/>
6822        </attribute>
6823      </optional>
6824      <empty/>
6825    </element>
6826  </define>
6827
6828  <define name="virtioOptions">
6829    <optional>
6830      <attribute name="iommu">
6831        <ref name="virOnOff"/>
6832      </attribute>
6833    </optional>
6834    <optional>
6835      <attribute name="ats">
6836        <ref name="virOnOff"/>
6837      </attribute>
6838    </optional>
6839    <optional>
6840      <attribute name="packed">
6841        <ref name="virOnOff"/>
6842      </attribute>
6843    </optional>
6844    <optional>
6845      <attribute name="page_per_vq">
6846        <ref name="virOnOff"/>
6847      </attribute>
6848    </optional>
6849  </define>
6850
6851  <define name="usbmaster">
6852    <element name="master">
6853      <attribute name="startport">
6854        <ref name="usbPort"/>
6855      </attribute>
6856      <empty/>
6857    </element>
6858  </define>
6859
6860  <define name="deviceBoot">
6861    <element name="boot">
6862      <attribute name="order">
6863        <ref name="positiveInteger"/>
6864      </attribute>
6865      <optional>
6866        <attribute name="loadparm">
6867          <data type="string">
6868            <param name="pattern">[a-zA-Z0-9.\s]{1,8}</param>
6869          </data>
6870        </attribute>
6871      </optional>
6872      <empty/>
6873    </element>
6874  </define>
6875
6876  <define name="diskMirror">
6877    <element name="mirror">
6878      <choice>
6879        <group> <!-- old format, for block copy back-compat -->
6880          <attribute name="file">
6881            <ref name="absFilePath"/>
6882          </attribute>
6883          <optional>
6884            <attribute name="format">
6885              <ref name="storageFormat"/>
6886            </attribute>
6887          </optional>
6888          <optional>
6889            <attribute name="job">
6890              <value>copy</value>
6891            </attribute>
6892          </optional>
6893          <optional>
6894            <interleave>
6895              <ref name="diskSourceFile"/>
6896              <optional>
6897                <ref name="diskFormat"/>
6898              </optional>
6899            </interleave>
6900          </optional>
6901        </group>
6902        <group> <!-- preferred format -->
6903          <attribute name="job">
6904            <choice>
6905              <value>copy</value>
6906              <value>active-commit</value>
6907            </choice>
6908          </attribute>
6909          <interleave>
6910            <ref name="diskSource"/>
6911            <optional>
6912              <ref name="diskFormat"/>
6913            </optional>
6914          </interleave>
6915        </group>
6916      </choice>
6917      <optional>
6918        <attribute name="ready">
6919          <choice>
6920            <value>yes</value>
6921            <value>abort</value>
6922            <value>pivot</value>
6923          </choice>
6924        </attribute>
6925      </optional>
6926      <ref name="diskBackingChain"/>
6927    </element>
6928  </define>
6929  <define name="diskAuth">
6930    <element name="auth">
6931      <attribute name="username">
6932        <ref name="genericName"/>
6933      </attribute>
6934      <ref name="diskAuthSecret"/>
6935    </element>
6936  </define>
6937
6938  <define name="diskAuthSecret">
6939    <element name="secret">
6940      <attribute name="type">
6941        <choice>
6942          <value>ceph</value>
6943          <value>iscsi</value>
6944        </choice>
6945      </attribute>
6946      <choice>
6947        <attribute name="uuid">
6948          <ref name="UUID"/>
6949        </attribute>
6950        <attribute name="usage">
6951          <ref name="objectName"/>
6952        </attribute>
6953      </choice>
6954    </element>
6955  </define>
6956
6957  <define name="diskIoTune">
6958    <element name="iotune">
6959      <interleave>
6960        <choice>
6961          <element name="total_bytes_sec">
6962            <data type="unsignedLong"/>
6963          </element>
6964          <group>
6965            <interleave>
6966              <optional>
6967                <element name="read_bytes_sec">
6968                  <data type="unsignedLong"/>
6969                </element>
6970              </optional>
6971              <optional>
6972                <element name="write_bytes_sec">
6973                  <data type="unsignedLong"/>
6974                </element>
6975              </optional>
6976            </interleave>
6977          </group>
6978        </choice>
6979        <choice>
6980          <element name="total_iops_sec">
6981            <data type="unsignedLong"/>
6982          </element>
6983          <group>
6984            <interleave>
6985              <optional>
6986                <element name="read_iops_sec">
6987                  <data type="unsignedLong"/>
6988                </element>
6989              </optional>
6990              <optional>
6991                <element name="write_iops_sec">
6992                  <data type="unsignedLong"/>
6993                </element>
6994              </optional>
6995            </interleave>
6996          </group>
6997        </choice>
6998        <choice>
6999          <element name="total_bytes_sec_max">
7000            <data type="unsignedLong"/>
7001          </element>
7002          <group>
7003            <interleave>
7004              <optional>
7005                <element name="read_bytes_sec_max">
7006                  <data type="unsignedLong"/>
7007                </element>
7008              </optional>
7009              <optional>
7010                <element name="write_bytes_sec_max">
7011                  <data type="unsignedLong"/>
7012                </element>
7013              </optional>
7014            </interleave>
7015          </group>
7016        </choice>
7017        <choice>
7018          <element name="total_iops_sec_max">
7019            <data type="unsignedLong"/>
7020          </element>
7021          <group>
7022            <interleave>
7023              <optional>
7024                <element name="read_iops_sec_max">
7025                  <data type="unsignedLong"/>
7026                </element>
7027              </optional>
7028              <optional>
7029                <element name="write_iops_sec_max">
7030                  <data type="unsignedLong"/>
7031                </element>
7032              </optional>
7033            </interleave>
7034          </group>
7035        </choice>
7036        <optional>
7037          <element name="size_iops_sec">
7038            <data type="unsignedLong"/>
7039          </element>
7040        </optional>
7041        <optional>
7042          <element name="group_name">
7043            <text/>
7044          </element>
7045        </optional>
7046        <choice>
7047          <element name="total_bytes_sec_max_length">
7048            <data type="unsignedLong"/>
7049          </element>
7050          <group>
7051            <interleave>
7052              <optional>
7053                <element name="read_bytes_sec_max_length">
7054                  <data type="unsignedLong"/>
7055                </element>
7056              </optional>
7057              <optional>
7058                <element name="write_bytes_sec_max_length">
7059                  <data type="unsignedLong"/>
7060                </element>
7061              </optional>
7062            </interleave>
7063          </group>
7064        </choice>
7065        <choice>
7066          <element name="total_iops_sec_max_length">
7067            <data type="unsignedLong"/>
7068          </element>
7069          <group>
7070            <interleave>
7071              <optional>
7072                <element name="read_iops_sec_max_length">
7073                  <data type="unsignedLong"/>
7074                </element>
7075              </optional>
7076              <optional>
7077                <element name="write_iops_sec_max_length">
7078                  <data type="unsignedLong"/>
7079                </element>
7080              </optional>
7081            </interleave>
7082          </group>
7083        </choice>
7084      </interleave>
7085    </element>
7086  </define>
7087
7088  <!-- Optional HyperV Enlightenment features -->
7089  <define name="hyperv">
7090    <element name="hyperv">
7091      <interleave>
7092        <optional>
7093          <element name="relaxed">
7094            <ref name="featurestate"/>
7095          </element>
7096        </optional>
7097        <optional>
7098          <element name="vapic">
7099            <ref name="featurestate"/>
7100          </element>
7101        </optional>
7102        <optional>
7103          <element name="spinlocks">
7104            <ref name="featurestate"/>
7105            <optional>
7106              <attribute name="retries">
7107                <data type="unsignedInt"/>
7108              </attribute>
7109            </optional>
7110          </element>
7111        </optional>
7112        <optional>
7113          <element name="vpindex">
7114            <ref name="featurestate"/>
7115          </element>
7116        </optional>
7117        <optional>
7118          <element name="runtime">
7119            <ref name="featurestate"/>
7120          </element>
7121        </optional>
7122        <optional>
7123          <element name="synic">
7124            <ref name="featurestate"/>
7125          </element>
7126        </optional>
7127        <optional>
7128          <element name="stimer">
7129            <ref name="stimer"/>
7130          </element>
7131        </optional>
7132        <optional>
7133          <element name="reset">
7134            <ref name="featurestate"/>
7135          </element>
7136        </optional>
7137        <optional>
7138          <element name="vendor_id">
7139            <ref name="featurestate"/>
7140            <optional>
7141              <attribute name="value">
7142                <data type="string">
7143                  <param name="pattern">[^,]{0,12}</param>
7144                </data>
7145              </attribute>
7146            </optional>
7147          </element>
7148        </optional>
7149        <optional>
7150          <element name="frequencies">
7151            <ref name="featurestate"/>
7152          </element>
7153        </optional>
7154        <optional>
7155          <element name="reenlightenment">
7156            <ref name="featurestate"/>
7157          </element>
7158        </optional>
7159        <optional>
7160          <element name="tlbflush">
7161            <ref name="featurestate"/>
7162          </element>
7163        </optional>
7164        <optional>
7165          <element name="ipi">
7166            <ref name="featurestate"/>
7167          </element>
7168        </optional>
7169        <optional>
7170          <element name="evmcs">
7171            <ref name="featurestate"/>
7172          </element>
7173        </optional>
7174      </interleave>
7175    </element>
7176  </define>
7177
7178  <!-- Hyper-V stimer features -->
7179  <define name="stimer">
7180    <interleave>
7181      <optional>
7182        <ref name="featurestate"/>
7183      </optional>
7184      <optional>
7185        <element name="direct">
7186          <ref name="featurestate"/>
7187        </element>
7188      </optional>
7189    </interleave>
7190  </define>
7191
7192  <!-- Optional KVM features -->
7193  <define name="kvm">
7194    <element name="kvm">
7195      <interleave>
7196        <optional>
7197          <element name="hidden">
7198            <ref name="featurestate"/>
7199          </element>
7200        </optional>
7201        <optional>
7202          <element name="hint-dedicated">
7203            <ref name="featurestate"/>
7204          </element>
7205        </optional>
7206        <optional>
7207          <element name="poll-control">
7208            <ref name="featurestate"/>
7209          </element>
7210        </optional>
7211        <optional>
7212          <element name="pv-ipi">
7213            <ref name="featurestate"/>
7214          </element>
7215        </optional>
7216      </interleave>
7217    </element>
7218  </define>
7219
7220  <!-- Optional Xen features -->
7221  <define name="xen">
7222    <element name="xen">
7223      <interleave>
7224        <optional>
7225          <element name="e820_host">
7226            <ref name="featurestate"/>
7227          </element>
7228        </optional>
7229        <optional>
7230          <element name="passthrough">
7231            <ref name="featurestate"/>
7232            <optional>
7233              <attribute name="mode">
7234                <data type="string">
7235                  <param name="pattern">(sync_pt|share_pt)</param>
7236                </data>
7237              </attribute>
7238            </optional>
7239          </element>
7240        </optional>
7241      </interleave>
7242    </element>
7243  </define>
7244
7245  <!-- Optional capabilities features -->
7246  <define name="capabilities">
7247    <element name="capabilities">
7248      <ref name="capabilitiespolicy"/>
7249      <interleave>
7250        <optional>
7251          <element name="audit_control">
7252            <ref name="featurestate"/>
7253          </element>
7254        </optional>
7255        <optional>
7256          <element name="audit_write">
7257            <ref name="featurestate"/>
7258          </element>
7259        </optional>
7260        <optional>
7261          <element name="block_suspend">
7262            <ref name="featurestate"/>
7263          </element>
7264        </optional>
7265        <optional>
7266          <element name="chown">
7267            <ref name="featurestate"/>
7268          </element>
7269        </optional>
7270        <optional>
7271          <element name="dac_override">
7272            <ref name="featurestate"/>
7273          </element>
7274        </optional>
7275        <optional>
7276          <element name="dac_read_search">
7277            <ref name="featurestate"/>
7278          </element>
7279        </optional>
7280        <optional>
7281          <element name="fowner">
7282            <ref name="featurestate"/>
7283          </element>
7284        </optional>
7285        <optional>
7286          <element name="fsetid">
7287            <ref name="featurestate"/>
7288          </element>
7289        </optional>
7290        <optional>
7291          <element name="ipc_lock">
7292            <ref name="featurestate"/>
7293          </element>
7294        </optional>
7295        <optional>
7296          <element name="ipc_owner">
7297            <ref name="featurestate"/>
7298          </element>
7299        </optional>
7300        <optional>
7301          <element name="kill">
7302            <ref name="featurestate"/>
7303          </element>
7304        </optional>
7305        <optional>
7306          <element name="lease">
7307            <ref name="featurestate"/>
7308          </element>
7309        </optional>
7310        <optional>
7311          <element name="linux_immutable">
7312            <ref name="featurestate"/>
7313          </element>
7314        </optional>
7315        <optional>
7316          <element name="mac_admin">
7317            <ref name="featurestate"/>
7318          </element>
7319        </optional>
7320        <optional>
7321          <element name="mac_override">
7322            <ref name="featurestate"/>
7323          </element>
7324        </optional>
7325        <optional>
7326          <element name="mknod">
7327            <ref name="featurestate"/>
7328          </element>
7329        </optional>
7330        <optional>
7331          <element name="net_admin">
7332            <ref name="featurestate"/>
7333          </element>
7334        </optional>
7335        <optional>
7336          <element name="net_bind_service">
7337            <ref name="featurestate"/>
7338          </element>
7339        </optional>
7340        <optional>
7341          <element name="net_broadcast">
7342            <ref name="featurestate"/>
7343          </element>
7344        </optional>
7345        <optional>
7346          <element name="net_raw">
7347            <ref name="featurestate"/>
7348          </element>
7349        </optional>
7350        <optional>
7351          <element name="setgid">
7352            <ref name="featurestate"/>
7353          </element>
7354        </optional>
7355        <optional>
7356          <element name="setfcap">
7357            <ref name="featurestate"/>
7358          </element>
7359        </optional>
7360        <optional>
7361          <element name="setpcap">
7362            <ref name="featurestate"/>
7363          </element>
7364        </optional>
7365        <optional>
7366          <element name="setuid">
7367            <ref name="featurestate"/>
7368          </element>
7369        </optional>
7370        <optional>
7371          <element name="sys_admin">
7372            <ref name="featurestate"/>
7373          </element>
7374        </optional>
7375        <optional>
7376          <element name="sys_boot">
7377            <ref name="featurestate"/>
7378          </element>
7379        </optional>
7380        <optional>
7381          <element name="sys_chroot">
7382            <ref name="featurestate"/>
7383          </element>
7384        </optional>
7385        <optional>
7386          <element name="sys_module">
7387            <ref name="featurestate"/>
7388          </element>
7389        </optional>
7390        <optional>
7391          <element name="sys_nice">
7392            <ref name="featurestate"/>
7393          </element>
7394        </optional>
7395        <optional>
7396          <element name="sys_pacct">
7397            <ref name="featurestate"/>
7398          </element>
7399        </optional>
7400        <optional>
7401          <element name="sys_ptrace">
7402            <ref name="featurestate"/>
7403          </element>
7404        </optional>
7405        <optional>
7406          <element name="sys_rawio">
7407            <ref name="featurestate"/>
7408          </element>
7409        </optional>
7410        <optional>
7411          <element name="sys_resource">
7412            <ref name="featurestate"/>
7413          </element>
7414        </optional>
7415        <optional>
7416          <element name="sys_time">
7417            <ref name="featurestate"/>
7418          </element>
7419        </optional>
7420        <optional>
7421          <element name="sys_tty_config">
7422            <ref name="featurestate"/>
7423          </element>
7424        </optional>
7425        <optional>
7426          <element name="syslog">
7427            <ref name="featurestate"/>
7428          </element>
7429        </optional>
7430        <optional>
7431          <element name="wake_alarm">
7432            <ref name="featurestate"/>
7433          </element>
7434        </optional>
7435      </interleave>
7436    </element>
7437  </define>
7438
7439  <define name="pmu">
7440    <element name="pmu">
7441      <optional>
7442        <ref name="featurestate"/>
7443      </optional>
7444    </element>
7445  </define>
7446
7447  <define name="featurestate">
7448    <attribute name="state">
7449      <ref name="virOnOff"/>
7450    </attribute>
7451  </define>
7452
7453  <define name="capabilitiespolicy">
7454    <attribute name="policy">
7455      <choice>
7456        <value>default</value>
7457        <value>allow</value>
7458        <value>deny</value>
7459      </choice>
7460    </attribute>
7461  </define>
7462
7463  <!--
7464       Optional hypervisor extensions in their own namespace:
7465         QEMU
7466    -->
7467  <define name="qemucmdline">
7468    <element name="commandline" ns="http://libvirt.org/schemas/domain/qemu/1.0">
7469      <interleave>
7470        <zeroOrMore>
7471          <element name="arg">
7472            <attribute name="value"/>
7473          </element>
7474        </zeroOrMore>
7475        <zeroOrMore>
7476          <element name="env">
7477            <attribute name="name">
7478              <ref name="filter-param-name"/>
7479            </attribute>
7480            <optional>
7481              <attribute name="value"/>
7482            </optional>
7483            <empty/>
7484          </element>
7485        </zeroOrMore>
7486      </interleave>
7487    </element>
7488  </define>
7489
7490  <define name="qemucapabilities">
7491    <element name="capabilities" ns="http://libvirt.org/schemas/domain/qemu/1.0">
7492      <interleave>
7493        <zeroOrMore>
7494          <element name="add">
7495            <attribute name="capability"/>
7496          </element>
7497        </zeroOrMore>
7498        <zeroOrMore>
7499          <element name="del">
7500            <attribute name="capability"/>
7501          </element>
7502        </zeroOrMore>
7503      </interleave>
7504    </element>
7505  </define>
7506
7507  <define name="qemudeprecation">
7508    <element name="deprecation" ns="http://libvirt.org/schemas/domain/qemu/1.0">
7509      <attribute name="behavior">
7510        <choice>
7511          <value>none</value>
7512          <value>omit</value>
7513          <value>reject</value>
7514          <value>crash</value>
7515        </choice>
7516      </attribute>
7517    </element>
7518  </define>
7519
7520
7521  <!--
7522       Optional hypervisor extensions in their own namespace:
7523       LXC
7524    -->
7525  <define name="lxcsharens">
7526    <element name="namespace" ns="http://libvirt.org/schemas/domain/lxc/1.0">
7527      <interleave>
7528        <optional>
7529          <element name="sharenet">
7530            <attribute name="type">
7531              <choice>
7532                <value>netns</value>
7533                <value>name</value>
7534                <value>pid</value>
7535              </choice>
7536            </attribute>
7537            <attribute name="value"/>
7538          </element>
7539        </optional>
7540        <optional>
7541          <element name="shareipc">
7542            <attribute name="type">
7543              <choice>
7544                <value>name</value>
7545                <value>pid</value>
7546              </choice>
7547            </attribute>
7548            <attribute name="value"/>
7549          </element>
7550        </optional>
7551        <optional>
7552          <element name="shareuts">
7553            <attribute name="type">
7554              <choice>
7555                <value>name</value>
7556                <value>pid</value>
7557              </choice>
7558            </attribute>
7559            <attribute name="value"/>
7560          </element>
7561        </optional>
7562      </interleave>
7563    </element>
7564  </define>
7565
7566  <!--
7567       Optional hypervisor extensions in their own namespace:
7568         Bhyve
7569    -->
7570  <define name="bhyvecmdline">
7571    <element name="commandline" ns="http://libvirt.org/schemas/domain/bhyve/1.0">
7572      <zeroOrMore>
7573        <element name="arg">
7574          <attribute name="value"/>
7575        </element>
7576      </zeroOrMore>
7577    </element>
7578  </define>
7579
7580  <!--
7581       Optional hypervisor extensions in their own namespace:
7582         Xen
7583    -->
7584  <define name="xencmdline">
7585    <element name="commandline" ns="http://libvirt.org/schemas/domain/xen/1.0">
7586      <zeroOrMore>
7587        <element name="arg">
7588          <attribute name="value"/>
7589        </element>
7590      </zeroOrMore>
7591    </element>
7592  </define>
7593
7594  <!--
7595       Optional hypervisor extensions in their own namespace:
7596         vmware
7597    -->
7598  <define name="vmwaredatacenterpath">
7599    <element name="datacenterpath" ns="http://libvirt.org/schemas/domain/vmware/1.0">
7600      <text/>
7601    </element>
7602  </define>
7603
7604  <!--
7605       Type library
7606    -->
7607  <define name="countCPU">
7608    <data type="unsignedShort">
7609      <param name="pattern">[0-9]+</param>
7610      <param name="minInclusive">1</param>
7611    </data>
7612  </define>
7613  <define name="vcpuid">
7614    <data type="unsignedShort">
7615      <param name="pattern">[0-9]+</param>
7616    </data>
7617  </define>
7618  <define name="cpushares">
7619    <data type="unsignedInt">
7620      <param name="pattern">[0-9]+</param>
7621    </data>
7622  </define>
7623  <define name="cpuperiod">
7624    <data type="unsignedLong">
7625      <param name="pattern">[0-9]+</param>
7626      <param name="minInclusive">1000</param>
7627      <param name="maxInclusive">1000000</param>
7628    </data>
7629  </define>
7630  <define name="cpuquota">
7631    <data type="long">
7632      <param name="pattern">-?[0-9]+</param>
7633      <param name="maxInclusive">17592186044415</param>
7634      <param name="minInclusive">-1</param>
7635    </data>
7636  </define>
7637  <define name="rebootTimeoutDelay">
7638    <data type="short">
7639      <param name="minInclusive">-1</param>
7640    </data>
7641  </define>
7642  <!-- weight currently is in range [100, 1000] -->
7643  <define name="weight">
7644    <data type="unsignedInt">
7645      <param name="pattern">[0-9]+</param>
7646      <param name="minInclusive">100</param>
7647      <param name="maxInclusive">1000</param>
7648    </data>
7649  </define>
7650  <define name="diskSerial">
7651    <data type="string">
7652      <param name="pattern">[A-Za-z0-9_\.\+\- ]+</param>
7653    </data>
7654  </define>
7655  <define name="bridgeMode">
7656    <data type="string">
7657      <param name="pattern">(vepa|bridge|private|passthrough)</param>
7658    </data>
7659  </define>
7660  <define name="addrIPorName">
7661    <choice>
7662      <ref name="ipAddr"/>
7663      <ref name="dnsName"/>
7664    </choice>
7665  </define>
7666  <define name="usbIdDefault">
7667    <data type="string">
7668      <param name="pattern">-1</param>
7669    </data>
7670  </define>
7671  <define name="usbId">
7672    <data type="string">
7673      <param name="pattern">(0x)?[0-9a-fA-F]{1,4}</param>
7674    </data>
7675  </define>
7676  <define name="usbVersion">
7677    <data type="string">
7678      <param name="pattern">[0-9]{1,2}.[0-9]{1,2}</param>
7679    </data>
7680  </define>
7681  <define name="usbAddr">
7682    <data type="string">
7683      <param name="pattern">(0x)?[0-9a-fA-F]{1,3}</param>
7684    </data>
7685  </define>
7686  <define name="usbClass">
7687    <data type="string">
7688      <param name="pattern">(0x)?[0-9a-fA-F]{1,2}</param>
7689    </data>
7690  </define>
7691  <define name="usbPort">
7692    <data type="string">
7693      <param name="pattern">((0x)?[0-9a-fA-F]{1,3}\.){0,3}(0x)?[0-9a-fA-F]{1,3}</param>
7694    </data>
7695  </define>
7696  <define name="driveController">
7697    <data type="string">
7698      <param name="pattern">[0-9]{1,2}</param>
7699    </data>
7700  </define>
7701  <define name="driveBus">
7702    <data type="string">
7703      <param name="pattern">[0-9]{1,2}</param>
7704    </data>
7705  </define>
7706  <define name="driveTarget">
7707    <data type="string">
7708      <param name="pattern">[0-9]{1,2}</param>
7709    </data>
7710  </define>
7711  <define name="driveSCSITarget">
7712    <data type="string">
7713      <param name="pattern">[0-9]{1,10}</param>
7714    </data>
7715  </define>
7716  <define name="driveUnit">
7717    <data type="string">
7718      <param name="pattern">[0-9]{1,5}</param>
7719    </data>
7720  </define>
7721  <define name="driveSCSIUnit">
7722    <data type="string">
7723      <param name="pattern">[0-9]{1,20}</param>
7724    </data>
7725  </define>
7726  <define name="timeDelta">
7727    <data type="string">
7728      <param name="pattern">(-|\+)?[0-9]+</param>
7729    </data>
7730  </define>
7731  <define name="timeZone">
7732    <data type="string">
7733      <param name="pattern">[a-zA-Z0-9_\.\+\-/]+</param>
7734    </data>
7735  </define>
7736  <define name="spaprvioReg">
7737    <data type="string">
7738      <param name="pattern">(0x)?[0-9a-fA-F]{1,8}</param>
7739    </data>
7740  </define>
7741  <define name="aliasName">
7742    <data type="string">
7743      <param name="pattern">[a-zA-Z0-9_\-.]+</param>
7744    </data>
7745  </define>
7746  <define name="virtioserialPort">
7747    <data type="string">
7748      <param name="pattern">[0-9]{1,2}</param>
7749    </data>
7750  </define>
7751  <define name="ccidSlot">
7752    <data type="string">
7753      <param name="pattern">[0-9]{1,2}</param>
7754    </data>
7755  </define>
7756  <define name="alias">
7757    <element name="alias">
7758      <attribute name="name">
7759        <ref name="aliasName"/>
7760      </attribute>
7761    </element>
7762    <empty/>
7763  </define>
7764  <define name="panic">
7765    <element name="panic">
7766      <optional>
7767        <attribute name="model">
7768          <choice>
7769            <value>isa</value>
7770            <value>pseries</value>
7771            <value>hyperv</value>
7772            <value>s390</value>
7773          </choice>
7774        </attribute>
7775      </optional>
7776      <interleave>
7777        <optional>
7778          <ref name="alias"/>
7779        </optional>
7780        <optional>
7781          <ref name="acpi"/>
7782        </optional>
7783        <optional>
7784          <ref name="address"/>
7785        </optional>
7786      </interleave>
7787    </element>
7788  </define>
7789  <define name="rawIO">
7790    <attribute name="rawio">
7791      <ref name="virYesNo"/>
7792    </attribute>
7793  </define>
7794  <define name="sgIO">
7795    <attribute name="sgio">
7796      <choice>
7797        <value>filtered</value>
7798        <value>unfiltered</value>
7799      </choice>
7800    </attribute>
7801  </define>
7802
7803  <define name="coalesce">
7804    <element name="coalesce">
7805      <interleave>
7806        <optional>
7807          <element name="rx">
7808            <optional>
7809              <element name="frames">
7810                <optional>
7811                  <attribute name="max">
7812                    <ref name="unsignedInt"/>
7813                  </attribute>
7814                </optional>
7815                <!--
7816                    This is how we'd add more Rx-related settings for
7817                    frames, like irq, high, and low
7818
7819                <optional>
7820                  <attribute name="irq">
7821                    <ref name="unsignedInt"/>
7822                  </attribute>
7823                </optional>
7824                <optional>
7825                  <attribute name="high">
7826                    <ref name="unsignedInt"/>
7827                  </attribute>
7828                </optional>
7829                <optional>
7830                  <attribute name="low">
7831                    <ref name="unsignedInt"/>
7832                  </attribute>
7833                </optional>
7834
7835              -->
7836              </element>
7837            </optional>
7838            <!--
7839                This is how we'd add more Rx-related settings, like
7840                usecs
7841
7842            <optional>
7843              <element name="usecs">
7844                <optional>
7845                  <attribute name="max">
7846                    <ref name="unsignedInt"/>
7847                  </attribute>
7848                </optional>
7849                <optional>
7850                  <attribute name="irq">
7851                    <ref name="unsignedInt"/>
7852                  </attribute>
7853                </optional>
7854                <optional>
7855                  <attribute name="high">
7856                    <ref name="unsignedInt"/>
7857                  </attribute>
7858                </optional>
7859                <optional>
7860                  <attribute name="low">
7861                    <ref name="unsignedInt"/>
7862                  </attribute>
7863                </optional>
7864              </element>
7865            </optional>
7866              -->
7867          </element>
7868        </optional>
7869        <!--
7870            This is how you would add more coalesce settings, like
7871            Tx-related ones
7872
7873        <optional>
7874          <element name="tx">
7875            <optional>
7876              <element name="frames">
7877                <optional>
7878                  <attribute name="max">
7879                    <ref name="unsignedInt"/>
7880                  </attribute>
7881                </optional>
7882                <optional>
7883                  <attribute name="irq">
7884                    <ref name="unsignedInt"/>
7885                  </attribute>
7886                </optional>
7887                <optional>
7888                  <attribute name="high">
7889                    <ref name="unsignedInt"/>
7890                  </attribute>
7891                </optional>
7892                <optional>
7893                  <attribute name="low">
7894                    <ref name="unsignedInt"/>
7895                  </attribute>
7896                </optional>
7897              </element>
7898            </optional>
7899            <optional>
7900              <element name="usecs">
7901                <optional>
7902                  <attribute name="max">
7903                    <ref name="unsignedInt"/>
7904                  </attribute>
7905                </optional>
7906                <optional>
7907                  <attribute name="irq">
7908                    <ref name="unsignedInt"/>
7909                  </attribute>
7910                </optional>
7911                <optional>
7912                  <attribute name="high">
7913                    <ref name="unsignedInt"/>
7914                  </attribute>
7915                </optional>
7916                <optional>
7917                  <attribute name="low">
7918                    <ref name="unsignedInt"/>
7919                  </attribute>
7920                </optional>
7921              </element>
7922            </optional>
7923          </element>
7924        </optional>
7925        -->
7926      </interleave>
7927    </element>
7928  </define>
7929
7930</grammar>
7931