From a52b74e7a379b2a8d42a80908c0c53d8b026327d Mon Sep 17 00:00:00 2001 From: Laine Stump Date: Fri, 21 May 2021 14:28:10 -0400 Subject: [PATCH] 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 ). Signed-off-by: Laine Stump Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 18 ++++++++++++++++++ src/conf/domain_conf.h | 1 + src/libvirt_private.syms | 1 + 3 files changed, 20 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 413c44ac61..6d90041bf8 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -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, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index bf1249571d..99f18c13bc 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -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); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 37515f80ec..333cca0b41 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -543,6 +543,7 @@ virDomainNetModelTypeToString; virDomainNetNotifyActualDevice; virDomainNetReleaseActualDevice; virDomainNetRemove; +virDomainNetRemoveByObj; virDomainNetRemoveHostdev; virDomainNetResolveActualType; virDomainNetSetModelString;