[libvirt] [patch 3/3] Prevent updates while IP address learn thread is running

Daniel Veillard veillard at redhat.com
Fri Apr 30 12:01:50 UTC 2010


On Thu, Apr 29, 2010 at 09:34:48PM -0400, Stefan Berger wrote:
> Prevent updating and tearing down of filter while the IP
> address learning thread is running and has its own filtering
> rules applied.
> 
> Signed-off-by: Stefan Berger <stefanb at us.ibm.com>
> 
> Index: libvirt-acl/src/nwfilter/nwfilter_gentech_driver.c
> ===================================================================
> --- libvirt-acl.orig/src/nwfilter/nwfilter_gentech_driver.c
> +++ libvirt-acl/src/nwfilter/nwfilter_gentech_driver.c
> @@ -610,6 +610,8 @@ virNWFilterInstantiate(virConnectPtr con
>      } else if (virHashSize(missing_vars->hashTable) > 1) {
>          rc = 1;
>          goto err_exit;
> +    } else if (virNWFilterLookupLearnReq(ifindex) == NULL) {
> +        goto err_exit;
>      }
>  
>      rc = _virNWFilterInstantiateRec(conn,
> @@ -890,7 +892,9 @@ int virNWFilterRollbackUpdateFilter(virC
>                                      const virDomainNetDefPtr net)
>  {
>      const char *drvname = EBIPTABLES_DRIVER_ID;
> +    int ifindex;
>      virNWFilterTechDriverPtr techdriver;
> +
>      techdriver = virNWFilterTechDriverForName(drvname);
>      if (!techdriver) {
>          virNWFilterReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -900,6 +904,11 @@ int virNWFilterRollbackUpdateFilter(virC
>          return 1;
>      }
>  
> +    /* don't tear anything while the address is being learned */
> +    if (ifaceGetIndex(true, net->ifname, &ifindex) == 0 &&
> +        virNWFilterLookupLearnReq(ifindex) != NULL)
> +        return 0;
> +
>      return techdriver->tearNewRules(conn, net->ifname);
>  }
>  
> @@ -909,7 +918,9 @@ virNWFilterTearOldFilter(virConnectPtr c
>                           virDomainNetDefPtr net)
>  {
>      const char *drvname = EBIPTABLES_DRIVER_ID;
> +    int ifindex;
>      virNWFilterTechDriverPtr techdriver;
> +
>      techdriver = virNWFilterTechDriverForName(drvname);
>      if (!techdriver) {
>          virNWFilterReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -919,6 +930,11 @@ virNWFilterTearOldFilter(virConnectPtr c
>          return 1;
>      }
>  
> +    /* don't tear anything while the address is being learned */
> +    if (ifaceGetIndex(true, net->ifname, &ifindex) == 0 &&
> +        virNWFilterLookupLearnReq(ifindex) != NULL)
> +        return 0;
> +
>      return techdriver->tearOldRules(conn, net->ifname);
>  }
>  
> 

  Looks fine,

ACK,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list