[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