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

[libvirt] [PATCH] qemu: cleanup tap devices on FreeBSD



We have to explicitly destroy TAP devices on FreeBSD because
they're not freed after being closed, otherwise we end up with
orphaned TAP devices after destroying a domain.
---
 src/qemu/qemu_process.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index ffa939a..9181423 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -61,6 +61,7 @@
 #include "viruuid.h"
 #include "virprocess.h"
 #include "virtime.h"
+#include "virnetdevbridge.h"
 #include "virnetdevtap.h"
 #include "virbitmap.h"
 #include "viratomic.h"
@@ -4381,6 +4382,12 @@ void qemuProcessStop(virQEMUDriverPtr driver,
                              virDomainNetGetActualVirtPortProfile(net),
                              cfg->stateDir));
             VIR_FREE(net->ifname);
+        } else if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_BRIDGE) {
+            /* On some OSes, e.g. FreeBSD, tap devices are not cleaned up when released,
+             * so we have to handle that manually */
+            ignore_value(virNetDevBridgeRemovePort(virDomainNetGetActualBridgeName(net),
+                         net->ifname));
+            ignore_value(virNetDevTapDelete(net->ifname));
         }
         /* release the physical device (or any other resources used by
          * this interface in the network driver
-- 
1.8.4.3


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