int tapfd = -1;
bool dnsmasqStarted = false;
bool devOnline = false;
+ bool firewalRulesAdded = false;
/* Check to see if any network IP collides with an existing route */
if (networkCheckRouteCollision(def) < 0)
networkAddFirewallRules(def) < 0)
goto err1;
+ firewalRulesAdded = true;
+
for (i = 0; (ipdef = virNetworkDefGetIPByIndex(def, AF_UNSPEC, i)); i++) {
if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET))
v4present = true;
/* Add the IP address/netmask to the bridge */
if (networkAddAddrToBridge(obj, ipdef) < 0)
- goto err2;
+ goto error;
}
if (networkStartHandleMACTableManagerMode(obj, macTapIfName) < 0)
- goto err2;
+ goto error;
/* Bring up the bridge interface */
if (virNetDevSetOnline(def->bridge, 1) < 0)
- goto err2;
+ goto error;
devOnline = true;
if (devOnline)
ignore_value(virNetDevSetOnline(def->bridge, 0));
- err2:
- if (!save_err)
- virErrorPreserveLast(&save_err);
- if (def->forward.type != VIR_NETWORK_FORWARD_OPEN)
+ if (firewalRulesAdded &&
+ def->forward.type != VIR_NETWORK_FORWARD_OPEN)
networkRemoveFirewallRules(def);
err1: