[...] > +static virNetworkPortDefPtr > +virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) > +{ > + virNetworkPortDefPtr def; > + char *uuid = NULL; > + xmlNodePtr virtPortNode; > + xmlNodePtr vlanNode; > + xmlNodePtr bandwidthNode; > + xmlNodePtr addressNode; > + char *trustGuestRxFilters = NULL; > + char *mac = NULL; > + char *macmgr = NULL; > + char *mode = NULL; > + char *plugtype = NULL; > + char *managed = NULL; > + char *driver = NULL; > + char *class_id = NULL; > + > + if (VIR_ALLOC(def) < 0) > + return NULL; > + > + uuid = virXPathString("string(./uuid)", ctxt); > + if (!uuid) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + "%s", _("network port has no uuid")); > + goto error; > + } > + if (virUUIDParse(uuid, def->uuid) < 0) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("Unable to parse UUID '%s'"), uuid); > + goto error; > + } > + > + def->ownername = virXPathString("string(./owner/name)", ctxt); > + if (!def->ownername) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + "%s", _("network port has no owner name")); > + goto error; > + } > + > + VIR_FREE(uuid); > + uuid = virXPathString("string(./owner/uuid)", ctxt); > + if (!uuid) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + "%s", _("network port has no owner UUID")); > + goto error; > + } > + > + if (virUUIDParse(uuid, def->owneruuid) < 0) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("Unable to parse UUID '%s'"), uuid); > + goto error; > + } > + > + def->group = virXPathString("string(./group)", ctxt); > + > + virtPortNode = virXPathNode("./virtualport", ctxt); > + if (virtPortNode && > + (!(def->virtPortProfile = virNetDevVPortProfileParse(virtPortNode, 0)))) { > + goto error; > + } > + > + mac = virXPathString("string(./mac/@address)", ctxt); > + if (!mac) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + "%s", _("network port has no mac")); > + goto error; > + } > + if (virMacAddrParse(mac, &def->mac) < 0) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("Unable to parse MAC '%s'"), mac); > + goto error; > + } > + > + bandwidthNode = virXPathNode("./bandwidth", ctxt); > + /* > + * We don't know if the port will allow the "floor" param or > + * not at this stage, so we must just tell virNetDevBandwidthParse > + * to allow it regardless. Any bad config must be reported at > + * time of use instead. > + */ > + if (bandwidthNode && > + virNetDevBandwidthParse(&def->bandwidth, &def->class_id, > + bandwidthNode, true) < 0) > + goto error; > + > + vlanNode = virXPathNode("./vlan", ctxt); > + if (vlanNode && virNetDevVlanParse(vlanNode, ctxt, &def->vlan) < 0) > + goto error; > + > + > + trustGuestRxFilters > + = virXPathString("string(./rxfilters/@trustGuest)", ctxt); > + if (trustGuestRxFilters) { > + if ((def->trustGuestRxFilters > + = virTristateBoolTypeFromString(trustGuestRxFilters)) <= 0) { > + virReportError(VIR_ERR_XML_ERROR, > + _("Invalid guest rx filters trust setting '%s' "), > + trustGuestRxFilters); > + goto error; > + } > + } Coverity notes @trustGuestRxFilters is not VIR_FREE'd later Although perhaps this code perhaps should have made use of the VIR_AUTOFREE macros... John > + > + plugtype = virXPathString("string(./plug/@type)", ctxt); > + [...] -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list