[PATCH] macvtap: cannot support target device name

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

 



Since the macvtap device needs active tear-down and the teardown logic
is based on the interface name, it can happen that if for example 1 out
of 3 interfaces was successfully created, that during the failure path
the macvtap's target device name is used to tear down an interface that
is doesn't own (owned by another VM).

So, in this patch, the target interface name is reset so that there is
no target interface name and the interface name is always cleared after
a tear down.

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

Index: libvirt-acl/src/conf/domain_conf.c
===================================================================
--- libvirt-acl.orig/src/conf/domain_conf.c
+++ libvirt-acl/src/conf/domain_conf.c
@@ -2207,6 +2207,8 @@ virDomainNetDefParseXML(virCapsPtr caps,
         def->data.direct.linkdev = dev;
         dev = NULL;
 
+        VIR_FREE(ifname);
+
         break;
 
     case VIR_DOMAIN_NET_TYPE_USER:
Index: libvirt-acl/src/qemu/qemu_conf.c
===================================================================
--- libvirt-acl.orig/src/qemu/qemu_conf.c
+++ libvirt-acl/src/qemu/qemu_conf.c
@@ -1556,6 +1556,7 @@ qemudPhysIfaceConnect(virConnectPtr conn
                 rc = -1;
                 delMacvtap(net->ifname,
                            &net->data.direct.virtPortProfile);
+                VIR_FREE(net->ifname);
             }
         }
     }
Index: libvirt-acl/src/qemu/qemu_driver.c
===================================================================
--- libvirt-acl.orig/src/qemu/qemu_driver.c
+++ libvirt-acl/src/qemu/qemu_driver.c
@@ -3708,9 +3708,11 @@ static void qemudShutdownVMDaemon(struct
     def = vm->def;
     for (i = 0; i < def->nnets; i++) {
         virDomainNetDefPtr net = def->nets[i];
-        if (net->type == VIR_DOMAIN_NET_TYPE_DIRECT)
+        if (net->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
             delMacvtap(net->ifname,
                        &net->data.direct.virtPortProfile);
+            VIR_FREE(net->ifname);
+        }
     }
 #endif
 
@@ -8545,9 +8547,11 @@ qemudDomainDetachNetDevice(struct qemud_
     virNWFilterTearNWFilter(detach);
 
 #if WITH_MACVTAP
-    if (detach->type == VIR_DOMAIN_NET_TYPE_DIRECT)
+    if (detach->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
         delMacvtap(detach->ifname,
                    &detach->data.direct.virtPortProfile);
+        VIR_FREE(detach->ifname);
+    }
 #endif
 
     if ((driver->macFilter) && (detach->ifname != NULL)) {

--
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]