networkStartNetwork(virNetworkDriverStatePtr driver,
virNetworkObjPtr network)
{
- int ret = 0;
+ int ret = -1;
+
+ VIR_DEBUG("driver=%p, network=%p", driver, network);
if (virNetworkObjIsActive(network)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("network is already active"));
- return -1;
+ return ret;
}
+ VIR_DEBUG("Beginning network startup process");
+
+ VIR_DEBUG("Setting current network def as transient");
if (virNetworkObjSetDefTransient(network, true) < 0)
- return -1;
+ goto cleanup;
switch (network->def->forward.type) {
case VIR_NETWORK_FORWARD_NONE:
case VIR_NETWORK_FORWARD_NAT:
case VIR_NETWORK_FORWARD_ROUTE:
- ret = networkStartNetworkVirtual(driver, network);
+ if (networkStartNetworkVirtual(driver, network) < 0)
+ goto cleanup;
break;
case VIR_NETWORK_FORWARD_BRIDGE:
case VIR_NETWORK_FORWARD_VEPA:
case VIR_NETWORK_FORWARD_PASSTHROUGH:
case VIR_NETWORK_FORWARD_HOSTDEV:
- ret = networkStartNetworkExternal(driver, network);
+ if (networkStartNetworkExternal(driver, network) < 0)
+ goto cleanup;
break;
}
- if (ret < 0) {
- virNetworkObjUnsetDefTransient(network);
- return ret;
- }
-
/* Persist the live configuration now that anything autogenerated
* is setup.
*/
- if ((ret = virNetworkSaveStatus(driverState->stateDir,
- network)) < 0) {
- goto error;
- }
+ VIR_DEBUG("Writing network status to disk");
+ if (virNetworkSaveStatus(driverState->stateDir, network) < 0)
+ goto cleanup;
- VIR_INFO("Starting up network '%s'", network->def->name);
network->active = 1;
+ VIR_INFO("Network '%s' started up", network->def->name);
+ ret = 0;
-error:
+cleanup:
if (ret < 0) {
+ virNetworkObjUnsetDefTransient(network);
virErrorPtr save_err = virSaveLastError();
int save_errno = errno;
networkShutdownNetwork(driver, network);