]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: new function virDomainNetRemoveByObj()
authorLaine Stump <laine@redhat.com>
Fri, 21 May 2021 18:28:10 +0000 (14:28 -0400)
committerLaine Stump <laine@redhat.com>
Tue, 25 May 2021 14:08:00 +0000 (10:08 -0400)
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>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms

index 413c44ac61b0139f939d51d170b1198d0b94b0f6..6d90041bf8a6d7538fe8dff4154a16e7138a176a 100644 (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,
index bf1249571d4a1b71efb8bb156e0ab376183cdb83..99f18c13bcfb8a4324a2dd11762115e384d012ec 100644 (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);
index 37515f80ecece4bd9c96dad5da11a2e19f5cbbf7..333cca0b412e30105d26e56ade5ccc633517f0bd 100644 (file)
@@ -543,6 +543,7 @@ virDomainNetModelTypeToString;
 virDomainNetNotifyActualDevice;
 virDomainNetReleaseActualDevice;
 virDomainNetRemove;
+virDomainNetRemoveByObj;
 virDomainNetRemoveHostdev;
 virDomainNetResolveActualType;
 virDomainNetSetModelString;