[libvirt] [PATCH] macvtap mac_filter support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch adds the mac_filter support to the macvtap device.

Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxx>

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,6 +1454,14 @@ 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;
@@ -3757,7 +3767,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)
--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]