]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix <cpu> element in domain XML schema
authorJiri Denemark <jdenemar@redhat.com>
Tue, 9 Feb 2010 14:53:03 +0000 (15:53 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Thu, 11 Feb 2010 15:46:20 +0000 (16:46 +0100)
The current schema is more permissive than the XML parsing code in
libvirt. Precisely, 'match' attribute is optional in schema while in
reality its use is bound to <model> element:

- <cpu> element without 'match' attribute is allowed only if <topology>
  element is the only child element of <cpu>

- <cpu> element with 'match' attribute requires <model> element to be
  present; <topology> and <feature> elements are optional

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
docs/schemas/domain.rng

index bb6d00d7c1f42285e3d93436447764dbda41b645..c913a509bc0ebc7438e54f2dce2c2d83c52a77d3 100644 (file)
       -->
   <define name="cpu">
     <element name="cpu">
-      <optional>
-        <attribute name="match">
-          <choice>
-            <value>minimum</value>
-            <value>exact</value>
-            <value>strict</value>
-          </choice>
-        </attribute>
-      </optional>
-      <interleave>
-        <optional>
-          <element name="model">
-            <text/>
-          </element>
-        </optional>
-        <optional>
-          <element name="topology">
-            <attribute name="sockets">
-              <ref name="positiveInteger"/>
-            </attribute>
-            <attribute name="cores">
-              <ref name="positiveInteger"/>
-            </attribute>
-            <attribute name="threads">
-              <ref name="positiveInteger"/>
-            </attribute>
-          </element>
-        </optional>
-        <zeroOrMore>
-          <element name="feature">
-            <attribute name="policy">
-              <choice>
-                <value>force</value>
-                <value>require</value>
-                <value>optional</value>
-                <value>disable</value>
-                <value>forbid</value>
-              </choice>
-            </attribute>
-            <attribute name="name">
-              <ref name="featureName"/>
-            </attribute>
-            <empty/>
-          </element>
-        </zeroOrMore>
-      </interleave>
+      <choice>
+        <ref name="cpuTopology"/>
+        <group>
+          <ref name="cpuMatch"/>
+          <interleave>
+            <ref name="cpuModel"/>
+            <optional>
+              <ref name="cpuTopology"/>
+            </optional>
+            <zeroOrMore>
+              <ref name="cpuFeature"/>
+            </zeroOrMore>
+          </interleave>
+        </group>
+      </choice>
+    </element>
+  </define>
+
+  <define name="cpuMatch">
+    <attribute name="match">
+      <choice>
+        <value>minimum</value>
+        <value>exact</value>
+        <value>strict</value>
+      </choice>
+    </attribute>
+  </define>
+
+  <define name="cpuModel">
+    <element name="model">
+      <text/>
+    </element>
+  </define>
+
+  <define name="cpuFeature">
+    <element name="feature">
+      <attribute name="policy">
+        <choice>
+          <value>force</value>
+          <value>require</value>
+          <value>optional</value>
+          <value>disable</value>
+          <value>forbid</value>
+        </choice>
+      </attribute>
+      <attribute name="name">
+        <ref name="featureName"/>
+      </attribute>
+      <empty/>
+    </element>
+  </define>
+
+  <define name="cpuTopology">
+    <element name="topology">
+      <attribute name="sockets">
+        <ref name="positiveInteger"/>
+      </attribute>
+      <attribute name="cores">
+        <ref name="positiveInteger"/>
+      </attribute>
+      <attribute name="threads">
+        <ref name="positiveInteger"/>
+      </attribute>
     </element>
   </define>