diff --git a/docs/schemas/interface.rng b/docs/schemas/interface.rng
index 27610a544c..80962d4db8 100644
--- a/docs/schemas/interface.rng
+++ b/docs/schemas/interface.rng
@@ -78,6 +78,7 @@
of the form DEVICE.VLAN
-->
+
@@ -156,6 +157,7 @@
bond
+
diff --git a/src/conf/interface_conf.c b/src/conf/interface_conf.c
index 2b3f69928e..397920b2d9 100644
--- a/src/conf/interface_conf.c
+++ b/src/conf/interface_conf.c
@@ -669,6 +669,8 @@ virInterfaceDefParseXML(xmlXPathContextPtr ctxt, int parentIfType)
int type;
char *tmp;
xmlNodePtr cur = ctxt->node;
+ xmlNodePtr lnk;
+
/* check @type */
tmp = virXPathString("string(./@type)", ctxt);
@@ -704,20 +706,22 @@ virInterfaceDefParseXML(xmlXPathContextPtr ctxt, int parentIfType)
goto error;
}
def->type = type;
+
+ if (type != VIR_INTERFACE_TYPE_BRIDGE) {
+ /* link status makes no sense for a bridge */
+ lnk = virXPathNode("./link", ctxt);
+ if (lnk && virInterfaceLinkParseXML(lnk, &def->lnk) < 0)
+ goto error;
+ }
+
switch (type) {
case VIR_INTERFACE_TYPE_ETHERNET: {
- xmlNodePtr lnk;
-
if (virInterfaceDefParseName(def, ctxt) < 0)
goto error;
tmp = virXPathString("string(./mac/@address)", ctxt);
if (tmp != NULL)
def->mac = tmp;
- lnk = virXPathNode("./link", ctxt);
- if (lnk && virInterfaceLinkParseXML(lnk, &def->lnk) < 0)
- goto error;
-
if (parentIfType == VIR_INTERFACE_TYPE_LAST) {
/* only recognize these in toplevel bond interfaces */
if (virInterfaceDefParseStartMode(def, ctxt) < 0)
@@ -1110,6 +1114,7 @@ virInterfaceDefDevFormat(virBufferPtr buf, const virInterfaceDef *def)
break;
case VIR_INTERFACE_TYPE_BOND:
virInterfaceStartmodeDefFormat(buf, def->startmode);
+ virInterfaceLinkFormat(buf, &def->lnk);
if (def->mtu != 0)
virBufferAsprintf(buf, "\n", def->mtu);
virInterfaceProtocolDefFormat(buf, def);
@@ -1119,6 +1124,7 @@ virInterfaceDefDevFormat(virBufferPtr buf, const virInterfaceDef *def)
virInterfaceStartmodeDefFormat(buf, def->startmode);
if (def->mac != NULL)
virBufferAsprintf(buf, "\n", def->mac);
+ virInterfaceLinkFormat(buf, &def->lnk);
if (def->mtu != 0)
virBufferAsprintf(buf, "\n", def->mtu);
virInterfaceProtocolDefFormat(buf, def);
diff --git a/tests/interfaceschemadata/bond.xml b/tests/interfaceschemadata/bond.xml
index c4e6d403bc..cbc1dfa8aa 100644
--- a/tests/interfaceschemadata/bond.xml
+++ b/tests/interfaceschemadata/bond.xml
@@ -1,5 +1,6 @@
+
diff --git a/tests/interfaceschemadata/vlan.xml b/tests/interfaceschemadata/vlan.xml
index a9570e3361..6432b96240 100644
--- a/tests/interfaceschemadata/vlan.xml
+++ b/tests/interfaceschemadata/vlan.xml
@@ -1,5 +1,6 @@
+