]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Update interface.rng and xml test files to match netcf 0.1.5
authorLaine Stump <laine@laine.org>
Sat, 2 Jan 2010 01:40:26 +0000 (20:40 -0500)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Tue, 19 Jan 2010 20:13:03 +0000 (21:13 +0100)
The RNG now supports IPv6 and bonds attached to bridges, along with
some other minor tweaks. All test files from netcf have been copied to
the test directory and added to the xml2xml and schema tests (and they
all pass, of course ;-)

16 files changed:
docs/schemas/interface.rng
tests/interfaceschemadata/bond-arp.xml
tests/interfaceschemadata/bond.xml
tests/interfaceschemadata/bridge-bond.xml [new file with mode: 0644]
tests/interfaceschemadata/bridge-empty.xml [new file with mode: 0644]
tests/interfaceschemadata/bridge-no-address.xml
tests/interfaceschemadata/bridge-vlan.xml
tests/interfaceschemadata/bridge.xml
tests/interfaceschemadata/bridge42.xml
tests/interfaceschemadata/ipv6-autoconf-dhcp.xml [new file with mode: 0644]
tests/interfaceschemadata/ipv6-autoconf.xml [new file with mode: 0644]
tests/interfaceschemadata/ipv6-dhcp.xml [new file with mode: 0644]
tests/interfaceschemadata/ipv6-local.xml [new file with mode: 0644]
tests/interfaceschemadata/ipv6-static-multi.xml [new file with mode: 0644]
tests/interfaceschemadata/ipv6-static.xml [new file with mode: 0644]
tests/interfacexml2xmltest.c

index bed2f0a27e9b5d5f7f04dde38686825f375ab3a9..a0df9bacc7aa5f6984082017f3482a0181ba2f06 100644 (file)
@@ -1,7 +1,13 @@
 <!-- A Relax NG schema for network interfaces -->
 <grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:v="http://netcf.org/xml/version/1.0"
          datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-  <start>
+  <!-- Versions for this schema are simple integers that are incremented
+       everytime a changed (but backwards compatible) version
+       is released. The current version is indicated with the v:serial
+       attribute on the start element.
+  -->
+  <start v:serial="4">
     <choice>
       <ref name="ethernet-interface"/>
       <ref name="bridge-interface"/>
             <ref name="on-or-off"/>
           </attribute>
         </optional>
-        <oneOrMore>
+        <!-- Bridge forward delay (see 'brctl setfd') -->
+        <optional v:since="2">
+          <attribute name="delay"><ref name="timeval"/></attribute>
+        </optional>
+        <zeroOrMore>
           <choice>
             <ref name="bare-ethernet-interface"/>
             <ref name="bare-vlan-interface"/>
+            <ref v:since="2" name="bare-bond-interface"/>
           </choice>
-        </oneOrMore>
+        </zeroOrMore>
       </element>
     </element>
   </define>
   <!--
       Bonds
   -->
-  <define name="bond-interface">
-    <element name="interface">
-      <attribute name="type">
-        <value>bond</value>
-      </attribute>
-      <ref name="name-attr"/>
-      <ref name="startmode"/>
-      <ref name="mtu"/>
-      <ref name="interface-addressing"/>
-      <element name="bond">
-        <optional>
-          <attribute name="mode">
-            <choice>
-              <value>balance-rr</value>
-              <!-- The primary interface is the first interface child
-                   of the bond element -->
-              <value>active-backup</value>
-              <value>balance-xor</value>
-              <value>broadcast</value>
-              <value>802.3ad</value>
-              <value>balance-tlb</value>
-              <value>balance-alb</value>
-            </choice>
-          </attribute>
-        </optional>
+  <define name="bond-interface-common">
+    <attribute name="type">
+      <value>bond</value>
+    </attribute>
+    <ref name="name-attr"/>
+  </define>
 
-        <!-- FIXME: add more attributes
+  <define name="bond-element">
+    <element name="bond">
+      <optional>
+        <attribute name="mode">
+          <choice>
+            <value>balance-rr</value>
+            <!-- The primary interface is the first interface child
+                 of the bond element -->
+            <value>active-backup</value>
+            <value>balance-xor</value>
+            <value>broadcast</value>
+            <value>802.3ad</value>
+            <value>balance-tlb</value>
+            <value>balance-alb</value>
+          </choice>
+        </attribute>
+      </optional>
 
-             mode == 802.3ad
-               ad_select
-               lacp_rate
-               xmit_hash_policy
+      <!-- FIXME: add more attributes
 
-             mode == active-backup
-               fail_over_mac
-               num_grat_arp when mode == active-backup (since 3.3.0)
-               num_unsol_na when mode == active-backup (ipv6, since 3.4.0)
+           mode == 802.3ad
+             ad_select
+             lacp_rate
+             xmit_hash_policy
 
-             mode == balance-xor
-               xmit_hash_policy       (since 2.6.3/3.2.2)
-        -->
+           mode == active-backup
+             fail_over_mac
+             num_grat_arp when mode == active-backup (since 3.3.0)
+             num_unsol_na when mode == active-backup (ipv6, since 3.4.0)
 
-        <choice>
-          <element name="miimon">
-            <!-- miimon frequency in ms -->
-            <attribute name="freq"><ref name="uint"/></attribute>
-            <optional>
-              <attribute name="downdelay"><ref name="uint"/></attribute>
-            </optional>
-            <optional>
-              <attribute name="updelay"><ref name="uint"/></attribute>
-            </optional>
-            <optional>
-              <!-- use_carrier -->
-              <attribute name="carrier">
-                <choice>
-                  <!-- use MII/ETHTOOL ioctl -->
-                  <value>ioctl</value>
-                  <!-- use netif_carrier_ok() -->
-                  <value>netif</value>
-                </choice>
-              </attribute>
-            </optional>
-          </element>
-          <element name="arpmon">
-            <attribute name="interval"><ref name="uint"/></attribute>
-            <attribute name="target"><ref name="ipv4-addr"/></attribute>
-            <optional>
-              <attribute name="validate">
-                <choice>
-                  <value>none</value>
-                  <value>active</value>
-                  <value>backup</value>
-                  <value>all</value>
-                </choice>
-              </attribute>
-            </optional>
-          </element>
-        </choice>
-        <oneOrMore>
-          <!-- The slave interfaces -->
-          <ref name="bare-ethernet-interface"/>
-        </oneOrMore>
-      </element>
+           mode == balance-xor
+             xmit_hash_policy       (since 2.6.3/3.2.2)
+      -->
+
+      <choice>
+        <element name="miimon">
+          <!-- miimon frequency in ms -->
+          <attribute name="freq"><ref name="uint"/></attribute>
+          <optional>
+            <attribute name="downdelay"><ref name="uint"/></attribute>
+          </optional>
+          <optional>
+            <attribute name="updelay"><ref name="uint"/></attribute>
+          </optional>
+          <optional>
+            <!-- use_carrier -->
+            <attribute name="carrier">
+              <choice>
+                <!-- use MII/ETHTOOL ioctl -->
+                <value>ioctl</value>
+                <!-- use netif_carrier_ok() -->
+                <value>netif</value>
+              </choice>
+            </attribute>
+          </optional>
+        </element>
+        <element name="arpmon">
+          <attribute name="interval"><ref name="uint"/></attribute>
+          <attribute name="target"><ref name="ipv4-addr"/></attribute>
+          <optional>
+            <attribute name="validate">
+              <choice>
+                <value>none</value>
+                <value>active</value>
+                <value>backup</value>
+                <value>all</value>
+              </choice>
+            </attribute>
+          </optional>
+        </element>
+      </choice>
+      <oneOrMore>
+        <!-- The slave interfaces -->
+        <ref name="bare-ethernet-interface"/>
+      </oneOrMore>
+    </element>
+  </define>
+
+  <define name="bare-bond-interface">
+    <element name="interface">
+      <ref name="bond-interface-common"/>
+      <ref name="bond-element"/>
+    </element>
+  </define>
+
+  <define name="bond-interface">
+    <element name="interface">
+      <ref name="bond-interface-common"/>
+      <ref name="startmode"/>
+      <ref name="mtu"/>
+      <ref name="interface-addressing"/>
+      <ref name="bond-element"/>
     </element>
   </define>
 
        different protocols
   -->
   <define name="interface-addressing">
-    <optional>
-      <element name="protocol">
-        <ref name="protocol-ipv4"/>
-      </element>
-    </optional>
-  </define>
-
-  <define name="protocol-ipv4">
-    <attribute name="family">
-      <value>ipv4</value>
-    </attribute>
     <choice>
-      <element name="dhcp">
+      <group>
         <optional>
-          <attribute name="peerdns">
-            <ref name="yes-or-no"/>
-          </attribute>
+          <ref name="protocol-ipv4"/>
         </optional>
-      </element>
-      <!-- FIXME: This format should be good enough for IPv4 and IPv6, i.e.
+        <optional v:since="3">
+          <ref name="protocol-ipv6"/>
+        </optional>
+      </group>
+      <group>
+        <optional v:since="3">
+          <ref name="protocol-ipv6"/>
+        </optional>
+        <optional>
+          <ref name="protocol-ipv4"/>
+        </optional>
+      </group>
+    </choice>
+  </define>
 
-           ipaddr="192.168.0.5/24"
-           ipaddr="2001:DB8:ABCD::1/64"
+  <define name="protocol-ipv4">
+    <element name="protocol">
+      <attribute name="family">
+        <value>ipv4</value>
+      </attribute>
+      <choice>
+        <ref name="dhcp-element"/>
+        <group>
+          <element name="ip">
+            <attribute name="address"><ref name="ipv4-addr"/></attribute>
+            <optional>
+              <attribute name="prefix"><ref name="ipv4-prefix"/></attribute>
+            </optional>
+          </element>
+          <optional>
+            <element name="route">
+              <attribute name="gateway"><ref name="ipv4-addr"/></attribute>
+            </element>
+          </optional>
+        </group>
+      </choice>
+    </element>
+  </define>
 
-           but will cause some backend pain
-      -->
-      <group>
+  <define name="protocol-ipv6">
+    <element name="protocol">
+      <attribute name="family">
+        <value>ipv6</value>
+      </attribute>
+      <optional>
+        <element name="autoconf"><empty/></element>
+      </optional>
+      <optional>
+        <ref name="dhcp-element"/>
+      </optional>
+      <zeroOrMore>
         <element name="ip">
-          <attribute name="address"><ref name="ipv4-addr"/></attribute>
+          <attribute name="address"><ref name="ipv6-addr"/></attribute>
           <optional>
-            <attribute name="prefix"><ref name="ipv4-prefix"/></attribute>
+            <attribute name="prefix"><ref name="ipv6-prefix"/></attribute>
           </optional>
         </element>
-        <optional>
-          <element name="route">
-            <attribute name="gateway"><ref name="ipv4-addr"/></attribute>
-          </element>
-        </optional>
-      </group>
-    </choice>
+      </zeroOrMore>
+      <optional>
+        <element name="route">
+          <attribute name="gateway"><ref name="ipv6-addr"/></attribute>
+        </element>
+      </optional>
+    </element>
   </define>
+
+  <define name="dhcp-element">
+    <element name="dhcp">
+      <optional>
+        <attribute name="peerdns">
+          <ref name="yes-or-no"/>
+        </attribute>
+      </optional>
+    </element>
+  </define>
+
   <!-- Jim Fehlig (<jfehlig@novell.com>) suggest the
        following additions to DHCP:
 
     </data>
   </define>
 
+  <define name="timeval">
+    <data type="double">
+      <param name="minInclusive">0</param>
+    </data>
+  </define>
+
   <define name='device-name'>
     <data type='string'>
       <param name="pattern">[a-zA-Z0-9_\.\-:/]+</param>
 
   <define name='ipv4-addr'>
     <data type='string'>
-      <param name="pattern">([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9]</param>
+      <param name="pattern">(((25[0-5])|(1[0-9]{2})|(2[0-4][0-9])|([0-9]{1,2}))\.){3}((25[0-5])|(1[0-9]{2})|(2[0-4][0-9])|([0-9]{1,2}))</param>
     </data>
   </define>
 
   <define name='ipv4-prefix'>
+    <data type='unsignedInt'>
+      <param name="maxInclusive">32</param>
+    </data>
+  </define>
+
+  <!-- Based on http://blog.mes-stats.fr/2008/10/09/regex-ipv4-et-ipv6 -->
+  <define name='ipv6-addr'>
     <data type='string'>
-      <param name="pattern">[1-9]|[12][0-9]|3[0-2]</param>
+      <!-- To understand this better, take apart the toplevel '|'s -->
+      <param name="pattern">(([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((((25[0-5])|(1[0-9]{2})|(2[0-4][0-9])|([0-9]{1,2})))\.){3}(((25[0-5])|(1[0-9]{2})|(2[0-4][0-9])|([0-9]{1,2}))))|(([0-9A-Fa-f]{1,4}:){0,5}:((((25[0-5])|(1[0-9]{2})|(2[0-4][0-9])|([0-9]{1,2})))\.){3}(((25[0-5])|(1[0-9]{2})|(2[0-4][0-9])|([0-9]{1,2}))))|(::([0-9A-Fa-f]{1,4}:){0,5}((((25[0-5])|(1[0-9]{2})|(2[0-4][0-9])|([0-9]{1,2})))\.){3}(((25[0-5])|(1[0-9]{2})|(2[0-4][0-9])|([0-9]{1,2}))))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:)</param>
+    </data>
+  </define>
+
+  <define name='ipv6-prefix'>
+    <data type='unsignedInt'>
+      <param name="maxInclusive">128</param>
     </data>
   </define>
 
index 7b4ed6fc1a7c560c0562ca10f32e585fcdc61ff1..69e1d98f083f46a9f0cb21fda36b630b5820b870 100644 (file)
@@ -6,7 +6,9 @@
   </protocol>
   <bond mode='active-backup'>
     <arpmon interval='100' target='192.168.50.1' validate='active'/>
-    <interface type='ethernet' name='eth1'/>
-    <interface type='ethernet' name='eth0'/>
+    <interface type='ethernet' name='eth1'>
+    </interface>
+    <interface type='ethernet' name='eth0'>
+    </interface>
   </bond>
 </interface>
index 81b92e35e33cd3c72f9c0b1838065bc4093cc2da..c4e6d403bc11d2fb477240db1a7860c3f9cbd8ea 100644 (file)
@@ -6,7 +6,9 @@
   </protocol>
   <bond mode='active-backup'>
     <miimon freq='100' updelay='10' carrier='ioctl'/>
-    <interface type='ethernet' name='eth1'/>
-    <interface type='ethernet' name='eth0'/>
+    <interface type='ethernet' name='eth1'>
+    </interface>
+    <interface type='ethernet' name='eth0'>
+    </interface>
   </bond>
 </interface>
diff --git a/tests/interfaceschemadata/bridge-bond.xml b/tests/interfaceschemadata/bridge-bond.xml
new file mode 100644 (file)
index 0000000..a8c30b9
--- /dev/null
@@ -0,0 +1,17 @@
+<interface type='bridge' name='br0'>
+  <start mode='onboot'/>
+  <mtu size='1500'/>
+  <bridge stp='off'>
+    <interface type='ethernet' name='eth2'>
+    </interface>
+    <interface type='bond' name='bond0'>
+      <bond mode='active-backup'>
+        <miimon freq='100' updelay='10' carrier='ioctl'/>
+        <interface type='ethernet' name='eth1'>
+        </interface>
+        <interface type='ethernet' name='eth0'>
+        </interface>
+      </bond>
+    </interface>
+  </bridge>
+</interface>
diff --git a/tests/interfaceschemadata/bridge-empty.xml b/tests/interfaceschemadata/bridge-empty.xml
new file mode 100644 (file)
index 0000000..72861e6
--- /dev/null
@@ -0,0 +1,6 @@
+<interface type='bridge' name='br0'>
+  <start mode='onboot'/>
+  <mtu size='1500'/>
+  <bridge stp='off'>
+  </bridge>
+</interface>
index cddafb1692a9f2739ac4591c569e97fa729a4e47..77575349fd1a4f44af5c8aefbb1bccc94546b9b1 100644 (file)
@@ -5,6 +5,7 @@
     <interface type='ethernet' name='eth0'>
       <mac address='ab:bb:cc:dd:ee:ff'/>
     </interface>
-    <interface type='ethernet' name='eth1'/>
+    <interface type='ethernet' name='eth1'>
+    </interface>
   </bridge>
 </interface>
index 77f992d1a5d39c03b077fd8a216d228e4c8ac346..559ebc4c5dcbe27cc6fe3e16e7eb4062b524e7bd 100644 (file)
@@ -6,7 +6,7 @@
   <bridge stp='off'>
     <interface type='vlan' name='eth0.42'>
       <vlan tag='42'>
-        <interface  name='eth0'/>
+        <interface name='eth0'/>
       </vlan>
     </interface>
   </bridge>
index 1f171140816585100e018af6cb118b59e0005245..2535edf94e87f020a7ca030416fccad310dca788 100644 (file)
@@ -4,10 +4,11 @@
   <protocol family='ipv4'>
     <dhcp/>
   </protocol>
-  <bridge stp='off'>
+  <bridge stp='off' delay='0.01'>
     <interface type='ethernet' name='eth0'>
       <mac address='ab:bb:cc:dd:ee:ff'/>
     </interface>
-    <interface type='ethernet' name='eth1'/>
+    <interface type='ethernet' name='eth1'>
+    </interface>
   </bridge>
 </interface>
index c6639ab801b758c6e0391838b250f684d5a0aade..199b62c0d98d24d9f4ae69e3037742362df0585b 100644 (file)
@@ -2,6 +2,7 @@
   <start mode='onboot'/>
   <mtu size='1500'/>
   <bridge stp='off'>
-    <interface type='ethernet' name='eth42'/>
+    <interface type='ethernet' name='eth42'>
+    </interface>
   </bridge>
 </interface>
diff --git a/tests/interfaceschemadata/ipv6-autoconf-dhcp.xml b/tests/interfaceschemadata/ipv6-autoconf-dhcp.xml
new file mode 100644 (file)
index 0000000..9ea716d
--- /dev/null
@@ -0,0 +1,7 @@
+<interface type='ethernet' name='eth0'>
+  <start mode='onboot'/>
+  <protocol family='ipv6'>
+    <autoconf/>
+    <dhcp/>
+  </protocol>
+</interface>
diff --git a/tests/interfaceschemadata/ipv6-autoconf.xml b/tests/interfaceschemadata/ipv6-autoconf.xml
new file mode 100644 (file)
index 0000000..eda0ea7
--- /dev/null
@@ -0,0 +1,6 @@
+<interface type='ethernet' name='eth0'>
+  <start mode='onboot'/>
+  <protocol family='ipv6'>
+    <autoconf/>
+  </protocol>
+</interface>
diff --git a/tests/interfaceschemadata/ipv6-dhcp.xml b/tests/interfaceschemadata/ipv6-dhcp.xml
new file mode 100644 (file)
index 0000000..7439539
--- /dev/null
@@ -0,0 +1,6 @@
+<interface type='ethernet' name='eth0'>
+  <start mode='onboot'/>
+  <protocol family='ipv6'>
+    <dhcp/>
+  </protocol>
+</interface>
diff --git a/tests/interfaceschemadata/ipv6-local.xml b/tests/interfaceschemadata/ipv6-local.xml
new file mode 100644 (file)
index 0000000..895d0f7
--- /dev/null
@@ -0,0 +1,5 @@
+<interface type='ethernet' name='eth0'>
+  <start mode='onboot'/>
+  <protocol family='ipv6'>
+  </protocol>
+</interface>
diff --git a/tests/interfaceschemadata/ipv6-static-multi.xml b/tests/interfaceschemadata/ipv6-static-multi.xml
new file mode 100644 (file)
index 0000000..f0cb00b
--- /dev/null
@@ -0,0 +1,8 @@
+<interface type='ethernet' name='eth0'>
+  <start mode='onboot'/>
+  <protocol family='ipv6'>
+    <ip address='3ffe:ffff:0:5::1' prefix='128'/>
+    <ip address='3ffe:ffff:0:5::3' prefix='128'/>
+    <ip address='3ffe:ffff:0:5::5' prefix='128'/>
+  </protocol>
+</interface>
diff --git a/tests/interfaceschemadata/ipv6-static.xml b/tests/interfaceschemadata/ipv6-static.xml
new file mode 100644 (file)
index 0000000..e43d2a2
--- /dev/null
@@ -0,0 +1,7 @@
+<interface type='ethernet' name='eth0'>
+  <start mode='onboot'/>
+  <protocol family='ipv6'>
+    <ip address='3ffe:ffff:0:5::1' prefix='128'/>
+    <route gateway='3ffe:ffff:1234:5678::1'/>
+  </protocol>
+</interface>
index ed3093c3aca362e3e2769f5de9b6c05ea0479a9b..d8f1b43e72be146c15dfcd234a1b299676c818ff 100644 (file)
@@ -83,11 +83,20 @@ mymain(int argc, char **argv)
     DO_TEST("ethernet-static-no-prefix");
     DO_TEST("bridge");
     DO_TEST("bridge42");
+    DO_TEST("bridge-bond");
+    DO_TEST("bridge-empty");
+    DO_TEST("bridge-no-address");
     DO_TEST("bridge-vlan");
     DO_TEST("bridge-no-address");
     DO_TEST("vlan");
     DO_TEST("bond");
     DO_TEST("bond-arp");
+    DO_TEST("ipv6-autoconf-dhcp");
+    DO_TEST("ipv6-autoconf");
+    DO_TEST("ipv6-dhcp");
+    DO_TEST("ipv6-local");
+    DO_TEST("ipv6-static-multi");
+    DO_TEST("ipv6-static");
 
     return (ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }