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

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to