[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