[libvirt] [PATCH v6 18/23] conf: support recording ports against virNetworkObjPtr

Daniel P. Berrangé berrange at redhat.com
Mon Jun 17 14:32:17 UTC 2019


On Thu, Jun 06, 2019 at 09:51:52PM -0400, Laine Stump wrote:
> On 5/23/19 11:32 AM, Daniel P. Berrangé wrote:
> > The virNetworkObjPtr state will need to maintain a record of all
> > virNetworkPortDefPtr objects associated with the network. Record these
> > in a hash and add APIs for manipulating them.
> > 
> > Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> > ---
> >   src/conf/virnetworkobj.c | 303 +++++++++++++++++++++++++++++++++++++++
> >   src/conf/virnetworkobj.h |  34 +++++
> >   src/libvirt_private.syms |   6 +
> >   3 files changed, 343 insertions(+)
> > 
> > diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c
> > index c9336e0472..47c142998e 100644
> > --- a/src/conf/virnetworkobj.c
> > +++ b/src/conf/virnetworkobj.c
> > @@ -58,6 +58,8 @@ struct _virNetworkObj {
> >       /* Immutable pointer, self locking APIs */
> >       virMacMapPtr macmap;
> > +
> > +    virHashTablePtr ports; /* uuid -> virNetworkPortDefPtr */
> >   };
> >   struct _virNetworkObjList {
> > @@ -86,6 +88,17 @@ virNetworkObjOnceInit(void)
> >   VIR_ONCE_GLOBAL_INIT(virNetworkObj);
> > +static int
> > +virNetworkObjLoadAllPorts(virNetworkObjPtr net,
> > +                          const char *stateDir);
> > +
> > +
> > +static void
> > +virNetworkObjPortFree(void *val, const void *key ATTRIBUTE_UNUSED)
> > +{
> > +    virNetworkPortDefFree(val);
> > +}
> > +
> >   virNetworkObjPtr
> >   virNetworkObjNew(void)
> >   {
> > @@ -106,6 +119,10 @@ virNetworkObjNew(void)
> >           virBitmapSetBitExpand(obj->classIdMap, 2) < 0)
> >           goto error;
> > +    if (!(obj->ports = virHashCreate(10,
> > +                                     virNetworkObjPortFree)))
> > +        goto error;
> > +
> >       virObjectLock(obj);
> >       return obj;
> > @@ -458,6 +475,7 @@ virNetworkObjDispose(void *opaque)
> >   {
> >       virNetworkObjPtr obj = opaque;
> > +    virHashFree(obj->ports);
> >       virNetworkDefFree(obj->def);
> >       virNetworkDefFree(obj->newDef);
> >       virBitmapFree(obj->classIdMap);
> > @@ -1072,9 +1090,16 @@ virNetworkObjLoadAllState(virNetworkObjListPtr nets,
> >               continue;
> >           obj = virNetworkLoadState(nets, stateDir, entry->d_name);
> > +
> > +        if (obj &&
> > +            virNetworkObjLoadAllPorts(obj, stateDir) < 0) {
> > +            virNetworkObjEndAPI(&obj);
> > +            goto cleanup;
> > +        }
> 
> 
> Why do you do this here instead of adding it to virNetworkLoadState()?
> 
> 
> ACK as-is if there's a reason for it. Otherwise, ACK with that chunk moved
> into virNetworkLoadState()

Just felt like it would be nice to have them separated, but not a strong
reason.
 
> Reviewed-by: Laine Stump <laine at laine.org>
> 
> 

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