For some reason the bridge stp mode and delay were put directly into
the "bridge" case of the switch in virInterfaceDefParseXML(), although
they are inside the <bridge> element, and so should be parsed in the
function created for that purpose - virInterfaceBridgeDefFormat().
---
src/conf/interface_conf.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/src/conf/interface_conf.c b/src/conf/interface_conf.c
index 397920b..c1a089a 100644
--- a/src/conf/interface_conf.c
+++ b/src/conf/interface_conf.c
@@ -487,11 +487,27 @@ virInterfaceDefParseBridge(virInterfaceDefPtr def,
xmlNodePtr *interfaces = NULL;
xmlNodePtr bridge;
virInterfaceDefPtr itf;
+ char *tmp = NULL;
int nbItf;
size_t i;
int ret = 0;
bridge = ctxt->node;
+ def->data.bridge.stp = -1;
+ if ((tmp = virXMLPropString(bridge, "stp"))) {
+ if (STREQ(tmp, "on")) {
+ def->data.bridge.stp = 1;
+ } else if (STREQ(tmp, "off")) {
+ def->data.bridge.stp = 0;
+ } else {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("bridge interface stp should be on or off got
%s"),
+ tmp);
+ goto error;
+ }
+ }
+ def->data.bridge.delay = virXMLPropString(bridge, "delay");
+
nbItf = virXPathNodeSet("./interface", ctxt, &interfaces);
if (nbItf < 0) {
ret = -1;
@@ -517,6 +533,7 @@ virInterfaceDefParseBridge(virInterfaceDefPtr def,
}
error:
+ VIR_FREE(tmp);
VIR_FREE(interfaces);
ctxt->node = bridge;
return ret;
@@ -751,23 +768,6 @@ virInterfaceDefParseXML(xmlXPathContextPtr ctxt, int parentIfType)
"%s", _("bridge interface misses the bridge
element"));
goto error;
}
- tmp = virXMLPropString(bridge, "stp");
- def->data.bridge.stp = -1;
- if (tmp != NULL) {
- if (STREQ(tmp, "on")) {
- def->data.bridge.stp = 1;
- } else if (STREQ(tmp, "off")) {
- def->data.bridge.stp = 0;
- } else {
- virReportError(VIR_ERR_XML_ERROR,
- _("bridge interface stp should be on or off got
%s"),
- tmp);
- VIR_FREE(tmp);
- goto error;
- }
- VIR_FREE(tmp);
- }
- def->data.bridge.delay = virXMLPropString(bridge, "delay");
ctxt->node = bridge;
if (virInterfaceDefParseBridge(def, ctxt) < 0)
goto error;
--
1.9.3