[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