aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaine Stump <laine@laine.org>2012-09-21 15:28:11 -0400
committerLaine Stump <laine@laine.org>2012-09-21 20:10:43 -0400
commit36ba0ee7b911a0f6536d7c4601afb2cc7a0e9d38 (patch)
tree5f9fb1f5655d8d240fd806bf17fa97dc3d62ee1a
parentDrop unused return value of virLogOutputFunc (diff)
downloadlibvirt-36ba0ee7b911a0f6536d7c4601afb2cc7a0e9d38.tar.gz
libvirt-36ba0ee7b911a0f6536d7c4601afb2cc7a0e9d38.tar.bz2
libvirt-36ba0ee7b911a0f6536d7c4601afb2cc7a0e9d38.zip
network: don't "refresh" iptables rules on rule-less networks
The bridge driver implementation of virNetworkUpdate() removes and re-adds iptables rules any time a network has an <ip>, <forward>, or <forward>/<interface> element updated. There are some types of networks that have those elements and yet have no iptables rules associated with them, and unfortunately the functions that remove/add iptables rules don't check the type of network before attempting to remove/add the rules, sometimes leading to an erroneous failure of the entire update operation. Under normal circumstances I would refactor the lower level functions to be more robust, but to avoid code churn as much as possible, I've just added extra checks directly to networkUpdate().
-rw-r--r--src/network/bridge_driver.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index fce17390b..6e260f774 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -2945,9 +2945,12 @@ networkUpdate(virNetworkPtr net,
goto cleanup;
}
- if (section == VIR_NETWORK_SECTION_IP ||
- section == VIR_NETWORK_SECTION_FORWARD ||
- section == VIR_NETWORK_SECTION_FORWARD_INTERFACE) {
+ if ((section == VIR_NETWORK_SECTION_IP ||
+ section == VIR_NETWORK_SECTION_FORWARD ||
+ section == VIR_NETWORK_SECTION_FORWARD_INTERFACE) &&
+ (network->def->forwardType == VIR_NETWORK_FORWARD_NONE ||
+ network->def->forwardType == VIR_NETWORK_FORWARD_NAT ||
+ network->def->forwardType == VIR_NETWORK_FORWARD_ROUTE)) {
/* these could affect the iptables rules */
networkRemoveIptablesRules(driver, network);
if (networkAddIptablesRules(driver, network) < 0)