[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