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.
This commit is contained in:
Peter Krempa 2012-10-25 16:32:29 +02:00
parent b6dbbae128
commit fa16957ccd

View File

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