[libvirt] [PATCH] [FIX] macvtap mac_filter support

Daniel Veillard veillard at redhat.com
Fri Feb 19 14:43:10 UTC 2010


On Fri, Feb 19, 2010 at 07:54:04AM -0500, Stefan Berger wrote:
> Previous posting had an unused variable in the compile case of --without-macvtap.
> 
> This patch adds the mac_filter support to the macvtap device.
> 
> Signed-off-by: Stefan Berger <stefanb at us.ibm.com>
> 
> 

> Index: libvirt-macvtap/src/qemu/qemu_conf.c
> ===================================================================
> --- libvirt-macvtap.orig/src/qemu/qemu_conf.c
> +++ libvirt-macvtap/src/qemu/qemu_conf.c
> @@ -335,7 +335,7 @@ int qemudLoadDriverConfig(struct qemud_d
>          if (!(driver->ebtables = ebtablesContextNew("qemu"))) {
>              driver->macFilter = 0;
>              virReportSystemError(errno,
> -                                 _("failed to enable mac filter in in '%s'"),
> +                                 _("failed to enable mac filter in '%s'"),
>                                   __FILE__);
>          }
>  
> @@ -1432,6 +1432,7 @@ int qemudExtractVersion(struct qemud_dri
>   */
>  int
>  qemudPhysIfaceConnect(virConnectPtr conn,
> +                      struct qemud_driver *driver,
>                        virDomainNetDefPtr net,
>                        char *linkdev,
>                        int brmode,
> @@ -1441,6 +1442,7 @@ qemudPhysIfaceConnect(virConnectPtr conn
>  #if WITH_MACVTAP
>      char *res_ifname = NULL;
>      int vnet_hdr = 0;
> +    int err;
>  
>      if (qemuCmdFlags & QEMUD_CMD_FLAG_VNET_HDR &&
>          net->model && STREQ(net->model, "virtio"))
> @@ -1452,12 +1454,21 @@ qemudPhysIfaceConnect(virConnectPtr conn
>          VIR_FREE(net->ifname);
>          net->ifname = res_ifname;
>      }
> +
> +    if (rc >=0 && driver->macFilter) {
> +        if ((err = networkAllowMacOnPort(driver, net->ifname, net->mac))) {
> +            virReportSystemError(err,
> +                 _("failed to add ebtables rule to allow MAC address on  '%s'"),
> +                                 net->ifname);
> +        }
> +    }
>  #else
>      (void)conn;
>      (void)net;
>      (void)linkdev;
>      (void)brmode;
>      (void)qemuCmdFlags;
> +    (void)driver;
>      qemuReportError(VIR_ERR_INTERNAL_ERROR,
>                      "%s", _("No support for macvtap device"));
>      rc = -1;
> @@ -3757,7 +3768,7 @@ int qemudBuildCommandLine(virConnectPtr 
>                  if (snprintf(tapfd_name, sizeof(tapfd_name), "%d", tapfd) >= sizeof(tapfd_name))
>                      goto no_memory;
>              } else if (net->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
> -                int tapfd = qemudPhysIfaceConnect(conn, net,
> +                int tapfd = qemudPhysIfaceConnect(conn, driver, net,
>                                                    net->data.direct.linkdev,
>                                                    net->data.direct.mode,
>                                                    qemuCmdFlags);
> Index: libvirt-macvtap/src/qemu/qemu_conf.h
> ===================================================================
> --- libvirt-macvtap.orig/src/qemu/qemu_conf.h
> +++ libvirt-macvtap/src/qemu/qemu_conf.h
> @@ -251,6 +251,7 @@ int         qemudNetworkIfaceConnect    
>      ATTRIBUTE_NONNULL(1);
>  
>  int qemudPhysIfaceConnect(virConnectPtr conn,
> +                          struct qemud_driver *driver,
>                            virDomainNetDefPtr net,
>                            char *linkdev,
>                            int brmode,
> Index: libvirt-macvtap/src/qemu/qemu_driver.c
> ===================================================================
> --- libvirt-macvtap.orig/src/qemu/qemu_driver.c
> +++ libvirt-macvtap/src/qemu/qemu_driver.c
> @@ -5723,7 +5723,7 @@ static int qemudDomainAttachNetDevice(vi
>              return -1;
>          }
>  
> -        if ((tapfd = qemudPhysIfaceConnect(conn, net,
> +        if ((tapfd = qemudPhysIfaceConnect(conn, driver, net,
>                                             net->data.direct.linkdev,
>                                             net->data.direct.mode,
>                                             qemuCmdFlags)) < 0)

  Okay, ACK,

   pushed !

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