[libvirt] [PATCH 3/3] Take the forwarding family into account

Michal Privoznik mprivozn at redhat.com
Mon Oct 15 14:54:31 UTC 2012


On 15.10.2012 12:27, Benjamin Cama wrote:
> Only add iptables rules for this family, and also only check for
> forwarding for this family.
> ---
>  src/network/bridge_driver.c |   27 +++++++++++++++++++++------
>  1 files changed, 21 insertions(+), 6 deletions(-)
> 
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index e3e8dc2..6bd4217 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -1788,7 +1788,9 @@ networkAddIptablesRules(struct network_driver *driver,
>          return -1;
>  
>      for (ii = 0;
> -         (ipdef = virNetworkDefGetIpByIndex(network->def, AF_UNSPEC, ii));
> +         (ipdef = virNetworkDefGetIpByIndex(network->def,
> +                                            network->def->forwardFamily,
> +                                            ii));
>           ii++) {
>          /* Add address-specific iptables rules */
>          if (networkAddIpSpecificIptablesRules(driver, network, ipdef) < 0) {
> @@ -1803,7 +1805,9 @@ err:
>       * added for previous IP addresses.
>       */
>      while ((--ii >= 0) &&
> -           (ipdef = virNetworkDefGetIpByIndex(network->def, AF_UNSPEC, ii))) {
> +           (ipdef = virNetworkDefGetIpByIndex(network->def,
> +                                              network->def->forwardFamily,
> +                                              ii))) {
>          networkRemoveIpSpecificIptablesRules(driver, network, ipdef);
>      }
>      networkRemoveGeneralIptablesRules(driver, network);
> @@ -1819,7 +1823,9 @@ networkRemoveIptablesRules(struct network_driver *driver,
>      virNetworkIpDefPtr ipdef;
>  
>      for (ii = 0;
> -         (ipdef = virNetworkDefGetIpByIndex(network->def, AF_UNSPEC, ii));
> +         (ipdef = virNetworkDefGetIpByIndex(network->def,
> +                                            network->def->forwardFamily,
> +                                            ii));
>           ii++) {
>          networkRemoveIpSpecificIptablesRules(driver, network, ipdef);
>      }
> @@ -2173,9 +2179,18 @@ networkStartNetworkVirtual(struct network_driver *driver,
>          goto err2;
>  
>      /* If forwardType != NONE, check for IP forwarding */
> -    if (network->def->forwardType != VIR_NETWORK_FORWARD_NONE &&
> -        networkCheckIpForwarding(v4present, v6present) < 0) {
> -        goto err3;
> +    if (network->def->forwardType != VIR_NETWORK_FORWARD_NONE) {
> +        if (network->def->forwardFamily) {
> +            /* if forwardFamily is set, we have at least a corresponding
> +             * family's address
> +             */
> +            if (networkCheckIpForwarding(network->def->forwardFamily == AF_INET,
> +                                         network->def->forwardFamily == AF_INET6) < 0)
> +                goto err3;
> +        } else {
> +            if (networkCheckIpForwarding(v4present, v6present) < 0)
> +                goto err3;
> +        }
>      }
>  
> 

ACK

Michal




More information about the libvir-list mailing list