[libvirt] [PATCH 09/27] conf: introduce virNetworkPortDefPtr struct and XML support

Daniel P. Berrangé berrange at redhat.com
Thu Jan 31 13:48:33 UTC 2019


On Tue, Jan 08, 2019 at 05:15:49PM +0100, Michal Privoznik wrote:
> On 12/24/18 3:58 PM, Daniel P. Berrangé wrote:
> > Introduce a virNetworkPortDefPtr struct to represent the data associated
> > with a virtual network port. Add APIs for parsing/formatting XML docs
> > with the data.
> > 
> > Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>

[snip]

> > +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;
> > +
> > +    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);
> > +    if (bandwidthNode &&
> > +        virNetDevBandwidthParse(&def->bandwidth, bandwidthNode, -1) < 0)
> 
> This must not be -1. The bandwidth corresponds to the interface not the
> bridge. If this is -1 then 'floor' is disallowed, which is not what we
> want. Maybe we need to change the @net_type argument of
> virNetDevBandwidthParse() so that it is bool which allows/denies 'floor'.

Yes, I'll introduce a prerequisite patch turning that parameter into
a 'bool allowFloor'.  When parsing network port XML, we'll have to
pass true unconditionally. At the time the port is actually wired up
we'll have a runtime check as to whether floor can actually be used
or not for a given port.



> > +    if (def->trustGuestRxFilters)
> > +        virBufferAsprintf(buf, "<rxfilters trustGuest='%s'/>",
> 
> Add "\n" here.

Yep, this shows some missing coverage in the test XML files which
I'll address too.


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list