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 @@ +