]> xenbits.xensource.com Git - libvirt.git/commitdiff
net: Add support for changing persistent networks to transient
authorPeter Krempa <pkrempa@redhat.com>
Thu, 25 Oct 2012 14:32:29 +0000 (16:32 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 2 Nov 2012 12:28:40 +0000 (13:28 +0100)
Until now, the network undefine API was able to undefine only inactive
networks. The restriction doesn't make sense any more so this patch
implements changing networks to transient.

src/network/bridge_driver.c

index 68a74f6cb745a9110cd087275376931f7d723e7d..68850e780aa212c97c5c3eac290e1c13b18f7fc1 100644 (file)
@@ -2864,6 +2864,7 @@ networkUndefine(virNetworkPtr net) {
     struct network_driver *driver = net->conn->networkPrivateData;
     virNetworkObjPtr network;
     int ret = -1;
+    bool active = false;
 
     networkDriverLock(driver);
 
@@ -2874,24 +2875,28 @@ networkUndefine(virNetworkPtr net) {
         goto cleanup;
     }
 
-    if (virNetworkObjIsActive(network)) {
-        virReportError(VIR_ERR_OPERATION_INVALID,
-                       "%s", _("network is still active"));
-        goto cleanup;
-    }
+    if (virNetworkObjIsActive(network))
+        active = true;
 
     if (virNetworkDeleteConfig(driver->networkConfigDir,
                                driver->networkAutostartDir,
                                network) < 0)
         goto cleanup;
 
+    /* make the network transient */
+    network->persistent = 0;
+    virNetworkDefFree(network->newDef);
+    network->newDef = NULL;
+
     VIR_INFO("Undefining network '%s'", network->def->name);
-    if (networkRemoveInactive(driver, network) < 0) {
+    if (!active) {
+        if (networkRemoveInactive(driver, network) < 0) {
+            network = NULL;
+            goto cleanup;
+        }
         network = NULL;
-        goto cleanup;
     }
 
-    network = NULL;
     ret = 0;
 
 cleanup: