[netcf-devel] [PATCH 1/1] Assigning addresses to toplevel interfaces is now optional

David Lutterkort lutter at redhat.com
Thu Jul 9 20:50:33 UTC 2009


  * data/xml/interface.rng (interface-addressing): now optional
  * data/xml/initscripts-put.xsl: only produce a <protocol/> tag
    if the toplevel interface actually has an address assigned
  * tests/test-initscripts.c: test an addressless bridge
  * tests/interface/bridge-no-address.xml,
    tests/initscripts/bridge-no-address.xml: data for bridge test
---
 NOTES                                   |    1 -
 data/xml/initscripts-put.xsl            |   11 +++++++++--
 data/xml/interface.rng                  |    8 +++++---
 tests/initscripts/bridge-no-address.xml |   26 ++++++++++++++++++++++++++
 tests/interface/bridge-no-address.xml   |   10 ++++++++++
 tests/test-initscripts.c                |    1 +
 6 files changed, 51 insertions(+), 6 deletions(-)
 create mode 100644 tests/initscripts/bridge-no-address.xml
 create mode 100644 tests/interface/bridge-no-address.xml

diff --git a/NOTES b/NOTES
index e1e7ca1..aa98af1 100644
--- a/NOTES
+++ b/NOTES
@@ -6,7 +6,6 @@
 ** using bonds in bridges
    settle on XML format for nesting
 ** support of additional bonding modes
-** remove requirement for interface-addressing from toplevel interfaces
 ** remove requirement for at least one element in bridge
 ** validate that name on vlan interface is consistent with base device + tag
 ** generate name attr if there is none (device_name_from_xml)
diff --git a/data/xml/initscripts-put.xsl b/data/xml/initscripts-put.xsl
index 88092a1..aac047a 100644
--- a/data/xml/initscripts-put.xsl
+++ b/data/xml/initscripts-put.xsl
@@ -177,16 +177,22 @@
   </xsl:template>
 
   <xsl:template name="protocol-ipv4">
+    <xsl:variable name="uses_dhcp"
+                  select="node[@label = 'BOOTPROTO']/@value = 'dhcp'"/>
+    <xsl:variable name="uses_static"
+                  select="count(node[@label = 'IPADDR']) > 0"/>
+    <xsl:variable name="uses_ipv4" select="$uses_dhcp or $uses_static"/>
+    <xsl:if test="$uses_ipv4">
     <protocol family="ipv4">
       <xsl:choose>
-        <xsl:when test="node[@label = 'BOOTPROTO']/@value = 'dhcp'">
+        <xsl:when test="$uses_dhcp">
           <dhcp>
             <xsl:if test="node[@label = 'PEERDNS']">
               <xsl:attribute name="peerdns"><xsl:value-of select="node[@label = 'PEERDNS']/@value"></xsl:value-of></xsl:attribute>
             </xsl:if>
           </dhcp>
         </xsl:when>
-        <xsl:when test="node[@label = 'BOOTPROTO']/@value = 'none'">
+        <xsl:when test="$uses_static">
           <ip address="{node[@label = 'IPADDR']/@value}">
             <xsl:if test="node[@label = 'NETMASK']">
               <xsl:attribute name="prefix"><xsl:value-of select="ipcalc:prefix(node[@label = 'NETMASK']/@value)"/></xsl:attribute>
@@ -198,6 +204,7 @@
         </xsl:when>
       </xsl:choose>
     </protocol>
+    </xsl:if>
   </xsl:template>
 
   <xsl:template name="bare-ethernet-interface">
diff --git a/data/xml/interface.rng b/data/xml/interface.rng
index 8a45480..bed2f0a 100644
--- a/data/xml/interface.rng
+++ b/data/xml/interface.rng
@@ -245,9 +245,11 @@
        different protocols
   -->
   <define name="interface-addressing">
-    <element name="protocol">
-      <ref name="protocol-ipv4"/>
-    </element>
+    <optional>
+      <element name="protocol">
+        <ref name="protocol-ipv4"/>
+      </element>
+    </optional>
   </define>
 
   <define name="protocol-ipv4">
diff --git a/tests/initscripts/bridge-no-address.xml b/tests/initscripts/bridge-no-address.xml
new file mode 100644
index 0000000..2a36d60
--- /dev/null
+++ b/tests/initscripts/bridge-no-address.xml
@@ -0,0 +1,26 @@
+<!-- A sketch of how the ethernet-static.xml example would be
+     turned into actual files.
+
+     The XML notation is close to what would turn up in a Augeas tree -->
+<forest>
+  <tree path="/files/etc/sysconfig/network-scripts/ifcfg-br0">
+    <node label="DEVICE" value="br0"/>
+    <node label="ONBOOT" value="yes"/>
+    <node label="MTU" value="1500"/>
+    <node label="TYPE" value="Bridge"/>
+    <node label="STP" value="off"/>
+  </tree>
+  <tree path="/files/etc/sysconfig/network-scripts/ifcfg-eth0">
+    <node label="DEVICE" value="eth0"/>
+    <node label="HWADDR" value="ab:bb:cc:dd:ee:ff"/>
+    <node label="ONBOOT" value="yes"/>
+    <node label="MTU" value="1500"/>
+    <node label="BRIDGE" value="br0"/>
+  </tree>
+  <tree path="/files/etc/sysconfig/network-scripts/ifcfg-eth1">
+    <node label="DEVICE" value="eth1"/>
+    <node label="ONBOOT" value="yes"/>
+    <node label="MTU" value="1500"/>
+    <node label="BRIDGE" value="br0"/>
+  </tree>
+</forest>
diff --git a/tests/interface/bridge-no-address.xml b/tests/interface/bridge-no-address.xml
new file mode 100644
index 0000000..4623e5e
--- /dev/null
+++ b/tests/interface/bridge-no-address.xml
@@ -0,0 +1,10 @@
+<interface type="bridge" name="br0">
+  <start mode="onboot"/>
+  <mtu size="1500"/>
+  <bridge stp="off">
+    <interface type="ethernet" name="eth0">
+      <mac address="ab:bb:cc:dd:ee:ff"/>
+    </interface>
+    <interface type="ethernet" name="eth1"/>
+  </bridge>
+</interface>
diff --git a/tests/test-initscripts.c b/tests/test-initscripts.c
index d7f27fe..b32c9a8 100644
--- a/tests/test-initscripts.c
+++ b/tests/test-initscripts.c
@@ -257,6 +257,7 @@ static void testTransforms(CuTest *tc) {
     assert_transforms(tc, "bond");
     assert_transforms(tc, "bond-arp");
     assert_transforms(tc, "bridge");
+    assert_transforms(tc, "bridge-no-address");
     assert_transforms(tc, "bridge-vlan");
     assert_transforms(tc, "ethernet-static");
     assert_transforms(tc, "ethernet-static-no-prefix");
-- 
1.6.0.6



More information about the netcf-devel mailing list