conf: new function virDomainNetRemoveByObj()

virDomainNetRemove() requires the index of the net device you want to
remove from the list, but in some cases you may not have the index
handy, only the object itself (or the object may not have been added
to the domain's list). virDomainNetRemoveByObj() first tries to find
the given object in the nets list, and deletes that if it is found.

As with virDomainNetRemove() it always unconditionally tries to remove
the device from the hostdevs list (in case it is the ridiculous
combined net+hostdev device created for <interface type='hostdev'>).

Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Laine Stump 2021-05-21 14:28:10 -04:00
parent 6731a6805d
commit a52b74e7a3
3 changed files with 20 additions and 0 deletions

View File

@ -15740,6 +15740,24 @@ virDomainNetRemove(virDomainDef *def, size_t i)
}
virDomainNetDef *
virDomainNetRemoveByObj(virDomainDef *def, virDomainNetDef *net)
{
size_t i;
/* the device might have been added to hostdevs but not nets */
virDomainNetRemoveHostdev(def, net);
for (i = 0; i < def->nnets; i++) {
if (def->nets[i] == net) {
VIR_DELETE_ELEMENT(def->nets, i, def->nnets);
break;
}
}
return net;
}
int
virDomainNetUpdate(virDomainDef *def,
size_t netidx,

View File

@ -3580,6 +3580,7 @@ int virDomainNetUpdate(virDomainDef *def, size_t netidx, virDomainNetDef *newnet
int virDomainNetDHCPInterfaces(virDomainDef *def, virDomainInterfacePtr **ifaces);
int virDomainNetARPInterfaces(virDomainDef *def, virDomainInterfacePtr **ifaces);
virDomainNetDef *virDomainNetRemove(virDomainDef *def, size_t i);
virDomainNetDef *virDomainNetRemoveByObj(virDomainDef *def, virDomainNetDef *net);
void virDomainNetRemoveHostdev(virDomainDef *def, virDomainNetDef *net);
int virDomainHostdevInsert(virDomainDef *def, virDomainHostdevDef *hostdev);

View File

@ -543,6 +543,7 @@ virDomainNetModelTypeToString;
virDomainNetNotifyActualDevice;
virDomainNetReleaseActualDevice;
virDomainNetRemove;
virDomainNetRemoveByObj;
virDomainNetRemoveHostdev;
virDomainNetResolveActualType;
virDomainNetSetModelString;