[netcf-devel] [PATCH 3/3] bridge: allow enslaving vlan's
David Lutterkort
lutter at redhat.com
Tue Jun 30 20:21:36 UTC 2009
* data/xml/interface.rng: allow vlan interface inside <bridge/>
* data/xml/initscripts-get.xsl, data/xml/initscripts-put.xsl: handle
enslaved vlan interfaces
* tests/test-initscripts.c: add transform test bridge-vlan.xml
---
data/xml/initscripts-get.xsl | 7 ++++++-
data/xml/initscripts-put.xsl | 9 +++++++--
data/xml/interface.rng | 5 ++++-
tests/initscripts/bridge-vlan.xml | 15 +++++++++++++++
tests/interface/bridge-vlan.xml | 13 +++++++++++++
tests/test-initscripts.c | 1 +
6 files changed, 46 insertions(+), 4 deletions(-)
create mode 100644 tests/initscripts/bridge-vlan.xml
create mode 100644 tests/interface/bridge-vlan.xml
diff --git a/data/xml/initscripts-get.xsl b/data/xml/initscripts-get.xsl
index 943f04a..7c1ed02 100644
--- a/data/xml/initscripts-get.xsl
+++ b/data/xml/initscripts-get.xsl
@@ -66,7 +66,12 @@
</tree>
<xsl:for-each select='bridge/interface'>
<tree>
- <xsl:call-template name="bare-ethernet-interface"/>
+ <xsl:if test="@type = 'ethernet'">
+ <xsl:call-template name="bare-ethernet-interface"/>
+ </xsl:if>
+ <xsl:if test="@type = 'vlan'">
+ <xsl:call-template name="bare-vlan-interface"/>
+ </xsl:if>
<node label="BRIDGE" value="{../../@name}"/>
</tree>
</xsl:for-each>
diff --git a/data/xml/initscripts-put.xsl b/data/xml/initscripts-put.xsl
index 54c1969..4d3f30b 100644
--- a/data/xml/initscripts-put.xsl
+++ b/data/xml/initscripts-put.xsl
@@ -33,7 +33,7 @@
VLAN's
-->
<xsl:template name="vlan-interface"
- match="tree[node[@label = 'VLAN' and @value = 'yes']]">
+ match="tree[node[@label = 'VLAN' and @value = 'yes']][count(node[@label = 'MASTER' or @label='BRIDGE']) = 0]">
<interface type="vlan">
<xsl:call-template name="name-attr"/>
<xsl:call-template name="startmode"/>
@@ -78,7 +78,12 @@
<xsl:attribute name="stp"><xsl:value-of select="node[@label = 'STP']/@value"/></xsl:attribute>
</xsl:if>
<xsl:for-each select="/descendant-or-self::*[node[@label = 'BRIDGE' and @value = $iface]]">
- <xsl:call-template name="bare-ethernet-interface"/>
+ <xsl:if test="count(node[@label = 'VLAN']) = 0">
+ <xsl:call-template name="bare-ethernet-interface"/>
+ </xsl:if>
+ <xsl:if test="count(node[@label = 'VLAN']) > 0">
+ <xsl:call-template name="bare-vlan-interface"/>
+ </xsl:if>
</xsl:for-each>
</bridge>
</interface>
diff --git a/data/xml/interface.rng b/data/xml/interface.rng
index fd68669..ffaa404 100644
--- a/data/xml/interface.rng
+++ b/data/xml/interface.rng
@@ -111,7 +111,10 @@
</attribute>
</optional>
<oneOrMore>
- <ref name="bare-ethernet-interface"/>
+ <choice>
+ <ref name="bare-ethernet-interface"/>
+ <ref name="bare-vlan-interface"/>
+ </choice>
</oneOrMore>
</element>
</element>
diff --git a/tests/initscripts/bridge-vlan.xml b/tests/initscripts/bridge-vlan.xml
new file mode 100644
index 0000000..784ed71
--- /dev/null
+++ b/tests/initscripts/bridge-vlan.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<forest>
+ <tree path="/files/etc/sysconfig/network-scripts/ifcfg-br0">
+ <node label="DEVICE" value="br0"/>
+ <node label="ONBOOT" value="yes"/>
+ <node label="TYPE" value="Bridge"/>
+ <node label="BOOTPROTO" value="dhcp"/>
+ <node label="STP" value="off"/>
+ </tree>
+ <tree path="/files/etc/sysconfig/network-scripts/ifcfg-eth0.42">
+ <node label="DEVICE" value="eth0.42"/>
+ <node label="VLAN" value="yes"/>
+ <node label="BRIDGE" value="br0"/>
+ </tree>
+</forest>
diff --git a/tests/interface/bridge-vlan.xml b/tests/interface/bridge-vlan.xml
new file mode 100644
index 0000000..700e971
--- /dev/null
+++ b/tests/interface/bridge-vlan.xml
@@ -0,0 +1,13 @@
+<interface type="bridge" name="br0">
+ <start mode="onboot"/>
+ <protocol family="ipv4">
+ <dhcp/>
+ </protocol>
+ <bridge stp="off">
+ <interface type="vlan" name="eth0.42">
+ <vlan tag="42">
+ <interface name="eth0"/>
+ </vlan>
+ </interface>
+ </bridge>
+</interface>
diff --git a/tests/test-initscripts.c b/tests/test-initscripts.c
index 4ad9332..5baf008 100644
--- a/tests/test-initscripts.c
+++ b/tests/test-initscripts.c
@@ -256,6 +256,7 @@ static void testTransforms(CuTest *tc) {
assert_transforms(tc, "bond");
assert_transforms(tc, "bond-arp");
assert_transforms(tc, "bridge");
+ assert_transforms(tc, "bridge-vlan");
assert_transforms(tc, "ethernet-static");
assert_transforms(tc, "ethernet-static-no-prefix");
assert_transforms(tc, "ethernet-dhcp");
--
1.6.0.6
More information about the netcf-devel
mailing list