This patch fixes the problem as shown below.
* virsh dumpxml failed with vlan1292 in inactive status
* virt-manager failed to view vlan1292 interface details.
Following is steps to reproduce in virsh.
1) setup 802.1q vlan tagging using ifcfg-files
#cat > /etc/sysconfig/network-scripts/ifcfg-vlan1292 < EOF
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan1292
PHYSDEV=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.254.5.254
NETMASK=255.255.255.0
TYPE=Ethernet
NM_CONTROLLED=no
EOF
2) active vlan interface and dumpxml
#ifup vlan1292
#virsh iface-dumpxml vlan1292
<interface type='vlan' name='vlan1292'>
<protocol family='ipv4'>
<ip address='10.254.5.254' prefix='24'/>
</protocol>
<protocol family='ipv6'>
<ip address='fe80::4:21ff:fe00:b300' prefix='64'/>
</protocol>
<link speed='1000' state='up'/>
<vlan tag='1292'>
<interface name='eth0'/>
</vlan>
</interface>
3) deactive vlan interface and dumpxml
#ifdown vlan1292
#virsh iface-dumpxml vlan1292
error: XML error: vlan interface misses the tag attribute
Once applied this patch, it's will be successfully return the results:
#virsh iface-dumpxml vlan1292
<interface type='vlan' name='vlan1292'>
<start mode='onboot'/>
<protocol family='ipv4'>
<ip address='10.254.5.254' prefix='24'/>
</protocol>
<vlan tag='1292'>
<interface name='eth0'/>
</vlan>
</interface>
Signed-off-by: Leno Hou <lenohou(a)gmail.com>
---
data/xml/redhat-put.xsl | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/data/xml/redhat-put.xsl b/data/xml/redhat-put.xsl
index ed56c66..0a370fe 100644
--- a/data/xml/redhat-put.xsl
+++ b/data/xml/redhat-put.xsl
@@ -56,11 +56,22 @@
<xsl:template name="vlan-device">
<xsl:variable name="name" select="node[@label =
'DEVICE']/@value"/>
- <xsl:variable name="device" select="substring-before($name,
'.')"/>
- <xsl:variable name="tag" select="substring-after($name,
'.')"/>
- <vlan tag="{$tag}">
- <interface name="{$device}"/>
- </vlan>
+ <xsl:choose>
+ <xsl:when test="contains($name, '.')">
+ <xsl:variable name="device" select="substring-before($name,
'.')"/>
+ <xsl:variable name="tag" select="substring-after($name,
'.')"/>
+ <vlan tag="{$tag}">
+ <interface name="{$device}"/>
+ </vlan>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="device" select="node[@label =
'PHYSDEV']/@value"/>
+ <xsl:variable name="tag" select="translate($name,
translate($name, '0123456789', ''), '')"/>
+ <vlan tag="{$tag}">
+ <interface name="{$device}"/>
+ </vlan>
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:template>
<!--
--
2.7.4