From fa16957ccd377d2e870ba4f5b7e9a7544e8105ea Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 25 Oct 2012 16:32:29 +0200 Subject: [PATCH] net: Add support for changing persistent networks to transient 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 | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 68a74f6cb7..68850e780a 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -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: