@@ -11,6 +11,7 @@
#include "qemu-common.h"
#include "qemu/error-report.h"
#include "net/filter.h"
+#include "qemu/config-file.h"
typedef struct FilterPlugin FilterPlugin;
struct FilterPlugin {
@@ -81,6 +82,19 @@ out:
static void filter_cleanup(NetClientState *nc)
{
FILTERState *s = DO_UPCAST(FILTERState, nc, nc);
+ NetClientState *plugin = NULL;
+ FilterPlugin *plug = NULL, *next = NULL;
+ QemuOpts *opts;
+
+ QLIST_FOREACH_SAFE(plug, &s->plugins, next, next) {
+ plugin = plug->plugin;
+ opts = qemu_opts_find(qemu_find_opts_err("netdev", NULL),
+ plugin->name);
+ assert(opts);
+
+ qemu_del_net_client(plugin);
+ qemu_opts_del(opts);
+ }
if (s->backend && nc->peer) {
qemu_flush_queued_packets(nc);
Signed-off-by: Yang Hongyang <yanghy@cn.fujitsu.com> --- net/filter.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)